วิธีที่ดีที่สุดในการจัดการการอ้างอิงในแอปพลิเคชัน. NET คืออะไร


9

เมื่อเร็ว ๆ นี้ที่ทำงานเราพบปัญหาที่เราติดแท็ก / แยกโครงการและมีปัญหาในการรวบรวมเนื่องจากการอ้างอิง dll / project ที่ชี้ไปยังโครงสร้างโฟลเดอร์เก่า

เราสร้างโฟลเดอร์ 'ถังขยะภายนอก' สำหรับแต่ละโครงการและคัดลอก dll ที่อ้างอิงไปยังโฟลเดอร์เหล่านี้ นี่เป็นวิธีที่ดีที่สุดหรือมีมาตรฐานอุตสาหกรรมเฉพาะเพื่อจัดการเรื่องนี้หรือไม่?

คำตอบ:


21

ฉันจะบอกว่าnugetเป็นวิธีที่ดีที่สุดในการจัดการการพึ่งพา

nuget สามารถจัดการเวอร์ชันและดาวน์โหลดการพึ่งพาจากเซิร์ฟเวอร์ nuget ในพื้นที่ของคุณโดยอัตโนมัติ

มันค่อนข้างง่ายในการสร้าง / กำหนดค่าเซิร์ฟเวอร์ภายใน เพียงสร้างโครงการ ASP.NET ใหม่ที่ว่างเปล่าและติดตั้งnuget-serverแพคเกจ nuget (โดยใช้ nuget;)

นั่นหมายความว่าคุณไม่จำเป็นต้องเช็คอินการพึ่งพาทั้งหมดและ / หรือจัดการเวอร์ชันของพวกเขาโดยใช้ TFS


1
ฉันพบว่า บริษัท ส่วนใหญ่ไม่สามารถใช้ประโยชน์ได้ดี ในความเป็นจริงฉันยังไม่ได้เห็นเซิร์ฟเวอร์บิลด์ที่ตั้งค่าไว้อย่างถูกต้องเพื่อรับประโยชน์จากสิ่งนี้ดังนั้น +1 สำหรับสิ่งที่ฉันอยากเห็นทุกที่
deltree

ฉันวางแผนที่จะถามคำถามว่า nuget ไม่สามารถถูกสคริปต์ (หรือบางอย่าง) เพื่อให้แพ็คเกจไม่ถูกทำลายและดาวน์โหลดการอ้างอิงโดยอัตโนมัติ…และผลการค้นหาแรกบอกฉันว่า nuget สนับสนุนสิ่งนี้นอกกรอบ! ขอบคุณ!
Mormegil

5

ไม่ใช่เรื่องจริง - Microsoft กล่าวว่าวิธีที่ดีที่สุดในการจัดการการอ้างอิงคือการสร้างโครงการของคุณด้วยโซลูชั่นขนาดใหญ่ ใช่ฉันรู้ว่าพวกเขาก็มีความหมายเช่นกัน

ทีมรูปแบบและการปฏิบัติได้นำแนวปฏิบัติที่ดีที่สุดมาใช้ร่วมกับ TFS แต่มันใช้กับงานสร้างทั่วไป การตั้งค่าโซลูชันมี 3 ประเภทคือ "1 โซลูชันขนาดใหญ่" ซึ่งเป็นวิธีการแบ่งพาร์ติชันซึ่งเป็นวิธีที่ผู้คนส่วนใหญ่ใช้ในการจัดการการสร้างโดยการสร้างและการคัดลอกสิ่งประดิษฐ์ไปยังไดเรกทอรีทั่วไป (ซึ่ง SI ไม่ได้ช่วยโดย NET การมีพา ธ 'รวมถึง' หรือ 'ไลบรารี' ทั่วทั้งเซิร์ฟเวอร์เพื่ออ้างอิง) และการตั้งค่าหลายโซลูชันซึ่งเป็นเวอร์ชันที่ซับซ้อนกว่าของพาร์ติชันที่แบ่งพาร์ติชัน

พวกเขาพูดว่า

In general you should:

    Use a single solution strategy unless the resulting solution is too large to load into Visual Studio.
    Use multiple solutions to create specific views on sub-systems of your application.
    Use multiple solutions to reduce the time it takes to load a solution and to reduce build time for developers.

สำหรับ TFS พวกเขาแนะนำให้แยกโครงการภายนอกใด ๆ ในโครงการของคุณแทนที่จะพึ่งพาการแมปพื้นที่ทำงานที่คล้ายกับการโค่นล้มภายนอกมากขึ้น โดยส่วนตัวฉันคิดว่าคำแนะนำของพวกเขาไม่มีแนวปฏิบัติที่ดีที่สุด แต่ฉันคิดว่าพวกเขากำลังพยายามลดปัญหาการสร้างใด ๆ ที่คุณจะได้รับเมื่อใช้การอ้างอิง

ฉันมีปัญหาเกี่ยวกับ. NET builds ที่พยายามลัดระบบโดยการสร้างเฉพาะสิ่งที่ต้องการสร้างตอนกลางคืนที่ทำทุกอย่างและคัดลอกชุดประกอบใหม่ทั้งหมดไปยังไดเรกทอรีเป็นวิธีที่ดีที่สุดสำหรับทุกคนในการซิงค์ - โดยเฉพาะผู้ทดสอบ โปรดทราบว่าสิ่งนี้ใช้กับแอป. NET เท่านั้นจริง ๆ แอปพลิเคชัน C ++ มักจะยังคงทำงานได้เนื่องจากไม่มีแอสเซมบลีที่มีเวอร์ชันหรือลักษณะที่คล้ายคลึงกันที่อาจทำให้เกิดปัญหากับคอมโพเนนต์การโทร วิธีการนี้ใช้งานได้ดี แต่คุณไม่สามารถสันนิษฐานได้เสมอว่าการสร้างบางส่วนนั้นไม่เป็นไรการสูบไอทั้งหมดและการสร้างใหม่นั้นปลอดภัยที่สุด


นี่เป็นเหตุผลหนึ่งในโซลูชันที่มีหลายโครงการ (API DLL ของคุณโครงการแอปพลิเคชัน)
Snoop

1

ขึ้นอยู่กับว่าโซลูชันของคุณมีโครงสร้างอย่างไรและความสามารถของซอฟต์แวร์ควบคุมเวอร์ชันของคุณคืออะไร ก่อนหน้านี้เราเคยเก็บโครงการที่ไม่ได้สร้าง / ข้ามในโซลูชันของเราที่จัดทำเอกสารและโฟลเดอร์เฉพาะสำหรับห้องสมุดอ้างอิงบุคคลที่สามใด ๆ เนื่องจากเป็นส่วนหนึ่งของโซลูชันจึงสามารถอ้างอิงพา ธ ไปยังไฟล์เหล่านี้ได้โดยใช้พา ธ สัมพัทธ์ หลังจากเราย้ายไปที่ TFS 2010 กำจัดโครงการนี้และเพิ่มไดเรกทอรี "Support" ในโฟลเดอร์ของโซลูชันในโครงการทีมขนานกับสาขาหลักของเรา ไม่ว่าในกรณีใดเวอร์ชันการควบคุมแหล่งที่มาของไลบรารีจะอยู่ในที่เดียวกันโดยไม่คำนึงว่าผู้พัฒนามีการกำหนดค่าเครื่องอย่างไร


0

เมื่อใช้การโค่นล้มสำหรับการควบคุมเวอร์ชันคุณสามารถใช้คุณสมบัติ "externals"เพื่อจุดประสงค์นี้ สิ่งนี้ช่วยให้คุณเก็บสำเนาของ DLL ที่ใช้ร่วมกันในเส้นทางที่สัมพันธ์กับโครงการปัจจุบันของคุณ ซึ่งทำให้ง่ายต่อการอ้างอิง DLL นั้นโดยพา ธ ของไฟล์แบบสัมพัทธ์ซึ่งไม่เปลี่ยนแปลงแม้ว่าคุณจะเปลี่ยนไดเรกทอรีหลักของโครงการเป็นโฟลเดอร์อื่น ภายนอกช่วยให้คุณกำหนดเวอร์ชันที่เจาะจงหรือการแก้ไขที่จะรวม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.