ควรเพิ่มโฟลเดอร์. net ในการควบคุมเวอร์ชันหรือไม่


107

ด้วย NuGet เวอร์ชันที่ใหม่กว่าคุณสามารถกำหนดค่าโปรเจ็กต์เพื่อกู้คืนแพ็กเกจ NuGet โดยอัตโนมัติเพื่อไม่ให้packagesโฟลเดอร์รวมอยู่ในที่เก็บซอร์สโค้ด ดี.

อย่างไรก็ตามคำสั่งนี้จะเพิ่ม.nugetโฟลเดอร์ใหม่และมีไบนารีอยู่ที่นั่นคือ NuGet.exe นอกจากนี้ยังสามารถสร้างขึ้นใหม่โดยอัตโนมัติโดย Visual Studio ดังนั้นจึงไม่รู้สึกถูกต้องที่จะเพิ่มสิ่งนั้นในการควบคุมเวอร์ชัน อย่างไรก็ตามหากไม่มีโฟลเดอร์นี้ Visual Studio จะไม่โหลดโซลูชันอย่างถูกต้อง

ผู้คนจัดการกับปัญหานี้อย่างไร? เพิ่ม. ได้รับการควบคุมแหล่งที่มา? เรียกใช้สคริปต์บรรทัดคำสั่งก่อนเปิดโซลูชันหรือไม่


นี่คือลิงค์ที่แท้จริงที่สุดdocs.nuget.org/docs/workflows/…และเนื่องจากเป็นเธรดเก่า ฉันต้องการแบ่งปันข้อมูลในความคิดเห็นเท่านั้น ...
Naveed Butt

คำตอบ:


47

โพสต์นี้เก่าแล้วคุณไม่ควรใช้การกู้คืนแพ็คเกจ NuGet ระดับโซลูชันอีกต่อไป ในเวอร์ชัน 2.7+ มีตัวเลือกในการตั้งค่า NuGet เพื่อกู้คืนแพ็คเกจโดยอัตโนมัติในบิลด์ ดังนั้นจึงสามารถลบโฟลเดอร์. net และตัวเลือกออกจากโปรเจ็กต์ของคุณได้

http://docs.nuget.org/docs/reference/package-restore

อัปเดต:ด้วยการเปิดตัว NuGet 4.x และ. NET Standard 2.0 เมื่อคุณใช้รูปแบบ csproj ใหม่ตอนนี้คุณสามารถใช้การอ้างอิงแพ็กเกจได้แนะนำการพึ่งพา msbuild เพื่อกู้คืนแพ็กเกจ แต่ตอนนี้แพ็กเกจเป็นพลเมืองชั้นหนึ่งของ msbuild . ลิงก์ด้านบนยังกล่าวถึงPackageReferenceแต่รายละเอียดการประกาศต่อไปนี้จะดีกว่า:

https://blog.nuget.org/20170316/NuGet-now-fully-integrated-into-MSBuild.html

และการประกาศ NuGet 4.x RTM ซึ่งไม่เป็นประโยชน์:

https://blog.nuget.org/20170308/Announcing-NuGet-4.0-RTM.html

อัปเดต 2:เห็นได้ชัดว่าด้วย VS2017 คุณสามารถใช้การอ้างอิงแพ็คเกจกับโปรเจ็กต์ csproj แบบคลาสสิกได้ แต่พวกเขาไม่สามารถใช้งานร่วมกันได้อีกต่อไปและมีปัญหาในการกู้คืนการอ้างอิงย่อยของแพ็คเกจ ฉันมั่นใจว่าทั้งหมดจะได้รับการแก้ไข



@CAD Bloke ใช่ที่อยู่ในรายการรออ่านด้านล่างขอบคุณที่ จำกัด ให้แคบลง
Jeremy

คุณสามารถอัปเดตใน Nuget VS Tools > Extensions & Updates > Updatesใช้
jocull

47

คำตอบของ @Richard Szalay ถูกต้อง - คุณไม่จำเป็นต้องกระทำ nuget.exe หากด้วยเหตุผลบางประการ Visual Studio ไม่ดาวน์โหลด nuget.exe โดยอัตโนมัติตรวจสอบให้แน่ใจว่าคุณตั้งค่าต่อไปนี้เป็น trueในnuget.targetsไฟล์:

<!-- Download NuGet.exe if it does not already exist --> 
<DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">true</DownloadNuGetExe>

ปิดโซลูชัน VS เปิดอีกครั้งและสร้าง Visual Studio ควรดาวน์โหลด nuget.exe โดยอัตโนมัติทันที


ยังtrueไงใครก็รู้ว่าทำไมถึงไม่ตั้งค่าเป็นค่าเริ่มต้น?
ajukraine

2
เป็นเรื่องความเป็นส่วนตัวมากกว่า "การดำเนินการง่ายๆในการส่งคำขอทางอินเทอร์เน็ตสามารถเปิดเผยข้อมูลเกี่ยวกับผู้ใช้ (เช่นจากที่อยู่ IP ของผู้ใช้เราสามารถประมาณตำแหน่งของเธอได้)" ดูบทความการคืนค่าแพ็คเกจและการยินยอมที่บล็อก Nuget
Gan

1
FYI: เมื่อไม่มี NuGet.exe อยู่ในโฟลเดอร์. nuget เมนูบริบทของโซลูชันจะแสดง "เปิดใช้งานการคืนค่าแพ็คเกจ NuGet" แม้ว่าจะกำหนดค่า NuGet Package Restore ไว้แล้วก็ตาม หลังจากสร้างตัวเลือกจะหายไป
comecme

นี่ควรเป็นคำตอบที่ยอมรับ IMO ... ถ้า NuGet.exe เล็กมากฉันอาจจะบอกว่าติดมันในการควบคุมแหล่งที่มาและจัดการกับสิ่งที่คุณต้องทำในไฟล์ที่ไม่สนใจ แต่มัน 1.5 megs มันใหญ่พอสำหรับฉันที่จะทำในแบบของ Gan
Brian MacKay

ดาวน์โหลดแบบฟอร์ม nuget.exe ที่ไหน จะเกิดอะไรขึ้นถ้า buildserver ของฉันไม่มีอินเทอร์เน็ต?
bitbonk


20

คุณจำเป็นต้องกระทำแต่ไม่.nuget\nuget.targets nuget.exeเป้าหมายจะดาวน์โหลด exe หากไม่มีตราบใดที่คุณเปลี่ยนDownloadNuGetExeเป็นtrueใน nuget.targets


4

แม้ว่าฉันมักจะไม่ชอบแนวคิดในการเพิ่ม exe ในการควบคุมแหล่งที่มา แต่ฉันขอแนะนำว่าการควบคุมแหล่งที่มาควรมีสิ่งที่จำเป็นในการเปิดสร้างและดำเนินการโครงการ

ในกรณีนี้ดูเหมือนว่าโฟลเดอร์. net จะเป็นการอ้างอิงที่จำเป็น ดังนั้นจึงควรอยู่ภายใต้การควบคุมแหล่งที่มา

คำถามเดียวที่คุณต้องค้นคว้าคือ NuGet จะตอบสนองอย่างไรหากโฟลเดอร์นั้นถูกทำเครื่องหมายเป็นแบบอ่านอย่างเดียวซึ่ง TFS จะทำเมื่อได้รับการเช็คอินแล้ว


อัปเดต: ฉันได้ค้นคว้าเพิ่มเติมเล็กน้อยเกี่ยวกับเรื่องนี้เนื่องจากฉันไม่เคยใช้ NuGet มาก่อน http://blog.davidebbo.com/2011/03/using-nuget-without-committing-packages.html

ฉันขอแนะนำว่าสิ่งที่คุณต้องการทำคือทำให้ NuGet เป็นข้อกำหนดที่ต้องติดตั้งในเวิร์กสเตชันของนักพัฒนาทุกคน

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

นอกเหนือจากนั้นฉันจะบอกว่าคุณอาจต้องการติดต่อ NuGet โดยตรงเพื่อถามพวกเขาว่าสิ่งนี้ควรจะใช้งานได้อย่างไร


1
ฉันคิดว่า<RestorePackages>true</RestorePackages>ในไฟล์ * .csproj ควรมีข้อมูลเพียงพอสำหรับ Visual Studio แต่อาจจะไม่ใช่
Borek Bernard

1

ตอนนี้นักเก็ตสนับสนุนการกู้คืนแพ็คเกจแล้วเรากำลังพิจารณาอย่างใกล้ชิดมากขึ้น

เราใช้การโค่นล้มเพื่อควบคุมแหล่งที่มาและความคิดเริ่มต้นของฉันคือ.nugetควรเพิ่มในที่เก็บของเรา แต่เพิ่มโดยใช้svn: externalsเพื่อให้ชี้ไปที่ตำแหน่งเดียว

ด้วยวิธีนี้เราสามารถเผยแพร่เวอร์ชันใหม่ให้กับนักพัฒนาและโครงการทั้งหมดโดยอัตโนมัติ สำหรับโครงการในสาขารีลีสแทนที่จะเป็น HEAD เราสามารถระบุการแก้ไขการอ้างอิงsvn: externals ได้หากเราต้องการปล่อยให้ nuget อยู่คนเดียว

เรามีโครงการจำนวนมากดังนั้นจึงหมายถึงการไม่ทำซ้ำnuget.exeหลาย ๆ ครั้งใน repo


ฉันไม่สามารถรับ NuGet เพื่อกู้คืนแพ็คเกจโครงการภายนอกได้ สิ่งนี้ได้ผลสำหรับคุณหรือไม่?
Doguhan Uluca

ใช่แม้ว่า NuGet.exe จะมีปัญหาในการตรวจสอบสิทธิ์ repo ในพื้นที่ของเรา (การตรวจสอบสิทธิ์ IIS 6 + SSL + AD) ในขณะที่ปลั๊กอิน Powershell หรือส่วนขยายทำงานได้ดี
si618

1

เรามีnuget.configไฟล์อยู่ในโฟลเดอร์เนื่องจากมีการอ้างอิงถึงเซิร์ฟเวอร์ Nuget ภายในของเราโดยใช้พื้นที่ Package Sources: https://docs.nuget.org/consume/nuget-config-settings

นอกเหนือจากเหตุผลนี้คุณควรปล่อยให้ Visual Studio จัดการการดาวน์โหลดแพ็คเกจ

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