ลบแพ็กเกจ nuget ออกจากโซลูชัน


148

ฉันได้เพิ่มฟีเจอร์การกู้คืนแพคเกจล่าสุดลงในโซลูชันโดยใช้ 'เปิดใช้งานการเรียกคืนแพคเกจ NuGet': http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

อย่างไรก็ตามมันสร้างเซิร์ฟเวอร์ของฉันที่เสียหายและฉันไม่มีเวลาที่จะแก้ไขดังนั้นฉันจึงต้องการลบมัน ไม่มีตัวเลือกเท่าที่ฉันรู้ดังนั้นฉันจึงลบบรรทัดต่อไปนี้ออกจากไฟล์ * .csproj ทั้งหมดของฉันด้วยตนเอง:

<Import Project="$(SolutionDir)\.nuget\nuget.targets" />

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

แนวคิดใดที่ฉันสามารถลบออกอย่างถาวรได้

UPDATE: แม้จะมีคำตอบด้านล่าง แต่ก็ยังคงกลับมาอีกครั้งเมื่อเปิดวิธีแก้ปัญหาใครก็ตามที่มีปัญหาเดียวกัน


2
คุณไม่สามารถย้อนกลับเซ็ตการแก้ไขในตัวควบคุมแหล่งที่มาได้หรือไม่
Betty

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

คุณจัดการแก้ไขเซิร์ฟเวอร์บิลด์แล้วหรือยัง? (และมันคือ Teamcity หรือไม่) เนื่องจากโครงการนำเข้าที่คุณอ้างถึงข้างต้นคือสิ่งที่ทำให้ Teamcity ของฉันไม่สามารถใช้งานได้
Baldy

@Baldy เราไม่ได้ใช้ TFS Build และฉันไม่ได้มองหาวิธีแก้ปัญหาเพียงแค่ลบออก (ยังวางแผนที่จะดำน้ำในภายหลัง)
Wiebe Tijsma

3
ฉันได้สร้างปัญหาให้กับทีม NuGet เพื่อแก้ไขปัญหานี้ โปรดไปลงคะแนนได้ที่nuget.codeplex.com/workitem/3756
deadlydog

คำตอบ:


214

ฉันดูไม่ค่อยดีมีคุณสมบัติเพิ่มไว้ในไฟล์โครงการอีก:

<RestorePackages>true</RestorePackages>

เพียงแค่ต้องลบสิ่งนี้รวมถึงบรรทัดเหล่านี้ด้วยตนเองจากไฟล์ * .csproj ทั้งหมด:

  <Import Project="$(SolutionDir)\.nuget\nuget.targets" />

UPDATE:

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

UPDATE2:

ลบโฟลเดอร์. nuget จากรูทโซลูชันด้วย

Update3:

NuGet รุ่นที่ใหม่กว่าเพิ่มส่วนอื่นที่คุณต้องการลบ:

 <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
  </Target>

Update4

ภายในส่วนที่NuGet.Targetsอยู่ใน.nugetโฟลเดอร์จะมีส่วนอื่นที่เพิ่มเข้าในโครงการใหม่ ... เปลี่ยนเป็นเท็จ

<!-- We need to ensure packages are restored prior to assembly resolve -->
<BuildDependsOn Condition="$(RestorePackages) == 'false'">
    RestorePackages;
    $(BuildDependsOn);
</BuildDependsOn>

7
ฉันได้พบว่ามี<Import Project="$(SolutionDir)\.nuget\nuget.targets" />ไฟล์ท้ายไฟล์. csproj ที่ต้องถูกลบออกด้วยตนเอง
TimDog

6
ฮา! หลังออกไปอย่างช้า ๆ :)
TimDog

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

7
"ตรวจสอบให้แน่ใจว่าคุณปิดโซลูชัน" มีความสำคัญจริง ๆ ที่นี่เนื่องจาก VS2010 ดูเหมือนจะแคชไฟล์ csproj / msbuild (โดยไม่ต้องทำการปรับเปลี่ยนบางอย่าง) ฉันไม่ได้สังเกตเห็นพฤติกรรมนี้ใน VS2012 แต่สิ่งนี้ทำให้ฉันรำคาญมากเมื่อแก้ไขไฟล์เหล่านี้ภายใน VisualStudio
ซาเวียร์ Decoster

4
ฉันได้สร้างปัญหาให้กับทีม NuGet เพื่อแก้ไขปัญหานี้ โปรดไปลงคะแนนได้ที่nuget.codeplex.com/workitem/3756
deadlydog

48

วิธีปิดใช้งานการคืนค่าแพคเกจ Nuget:

  1. ลบโฟลเดอร์. nuget
  2. ลบบรรทัดเฉพาะออกจากไฟล์. csproj ทั้งหมด

บรรทัดที่จะลบ:

<Import Project="$(SolutionDir)\.nuget\nuget.targets" />
<RestorePackages>true</RestorePackages>

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

สิ่งนี้มีพื้นฐานมาจากบทความต่อไปนี้: http://bartwullems.blogspot.no/2012/08/disable-nuget-package-restore.html

นอกจากนี้คุณอาจต้องการตรวจสอบอีกครั้งว่าตัวเลือกนี้ถูกปิดใช้งาน: http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages


ฉันได้สร้างปัญหาให้กับทีม NuGet เพื่อแก้ไขปัญหานี้ โปรดไปลงคะแนนได้ที่nuget.codeplex.com/workitem/3756
deadlydog

1
ขอบคุณสำหรับฉันมันเป็นเพียงการถอดถอนตัวเลือกนั้น
Maarten Kieft

ฉันใช้เครื่องมือ IFix ที่ประสบความสำเร็จอย่างมากในการทำความสะอาด repos ด้วยหลายโครงการ มันเป็นไปตามขั้นตอนเหล่านี้โดยอัตโนมัติ visualstudiogallery.msdn.microsoft.com/…
angularsen

โฟลเดอร์. nuget ถูกซ่อนไว้และคุณต้องลบออกจากไดเรกทอรีไม่เพียง แต่โครงการ
Erik Bergstedt

8

การตั้งค่านี้ที่นี่ไม่ใช่เหรอ

ตัวเลือก ... -> Nuget Package Manager -> [ไม่เลือก] อนุญาตให้ Nuget ดาวน์โหลดแพ็คเกจที่ขาดหายไป

ป้อนคำอธิบายรูปภาพที่นี่

ฉันใช้ Visual Studio Professional + Resharper 8.2


ฉันลบโฟลเดอร์แพ็คเกจและล้างแพคเกจแคชเพื่อแก้ไขปัญหาของฉัน ขอบคุณ!
Tresto

1
ไม่ไม่อัปเดตไฟล์. proj หลังจาก - ดังนั้นปัญหาจะกลับมา - แต่ก็ดีที่จะทำที่นี่เช่นกัน :-)
schmoopy

หน้าต่างเอาต์พุตแสดงสิ่งนี้ขณะที่กำลังสร้าง: Restoring NuGet packages... To prevent NuGet from restoring packages during build, open the Visual Studio Options dialog, click on the Package Manager node and uncheck 'Allow NuGet to download missing packages during build.'มันเป็นเพียงการยืนยันว่านี่ควรเป็นทางที่จะไป
มุสลิม Ben Dhaou

1
สิ่งนี้ไม่เกี่ยวข้องกับการคืนค่าแพคเกจของ Nuget VS เวอร์ชันเก่ามีรายการเมนูบริบทสำหรับโครงการที่ชื่อ“ เปิดใช้งานแพคเกจ Nuget”ซึ่งจะสร้าง.nuget/โฟลเดอร์และปรับเปลี่ยนของคุณ.csprojเพื่ออ้างอิง.targetsไฟล์ คุณควรจะมอบnuget.exeให้กับ VCS ของคุณ (eww แก้ปัญหานักเก็ตแก้ปัญหา!) และความอัปลักษณ์แบบนั้น ทุกวันนี้msbuild /restoreมีอยู่แล้วและการเรียกคืนแพ็คเกจภายในตัวของ VS OP กำลังขอวิธีลบสิ่งเก่าและวิธีที่ไม่ดีในการทำสิ่งต่าง ๆ ไม่ใช่วิธีการปิดการใช้งานการสนับสนุนแพคเกจการกู้คืนแพคเกจภายในที่ถูกต้องของ VS
binki

5

โซลูชันที่ใช้การกู้คืนแพ็คเกจ MSBuild แบบรวมสามารถย้ายไปยังการคืนค่าแพ็คเกจอัตโนมัติ จากสิ่งที่ฉันเข้าใจสิ่งนี้จะช่วยให้ผู้ที่ประสบปัญหาการสร้าง CI (โปรดแก้ไขให้ฉันด้วยถ้าฉันเข้าใจผิด)

โปรดดูเอกสารในเว็บไซต์ nuget: การโยกย้ายโซลูชัน MSBuild รวมเพื่อใช้การคืนค่าแพคเกจอัตโนมัติที่http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore

มีข้อมูลสำหรับการแปลงด้วยและไม่มี TFS

David Ebbo ยังโพสต์ข้อมูลบางอย่างที่http://blog.davidebbo.com/2014/01/the-right-way-to-restore-nuget-packages.html



3

NuGet มีบล็อกโพสต์เกี่ยวกับการโยกย้ายไปยังแพคเกจคืนค่าอัตโนมัติ: http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore

มีสคริปต์powershellอ้างอิงในโพสต์บล็อกที่จะดูแลการลบบรรทัดที่จำเป็นโดยอัตโนมัติ (และซ้ำ): https://github.com/owen2/AutomaticPackageRestoreMigrationScript/blob/master/migrateToAutomaticPackageRestore.ps1

การนำเสนอตัวเลือกปิดใช้งานการคืนค่าแพคเกจ NuGet โดยตรงจะถูกทำเครื่องหมายเป็นไม่แก้ไข: https://nuget.codeplex.com/workitem/1883


2

ฉันได้ติดตามโซลูชันที่ยอมรับแล้วว่าไม่มีประโยชน์ในการใช้งาน 2012 สิ่งนี้ใช้ได้ผล

  1. ปิด VS อย่างสมบูรณ์
  2. อัปเดต<RestorePackages>true</RestorePackages>ถึง<RestorePackages>false</RestorePackages>และลบ<Import Project="$(SolutionDir)\.nuget\nuget.targets" />บรรทัด
  3. นอกจากนี้ยังเปลี่ยนชื่อnuget.exeไปnuget.exe.NotExe

2

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

เพียงเรียกใช้ตัวติดตั้ง ( IFixจะถูกเพิ่มลงในPATH) จากนั้นเรียกใช้สิ่งต่อไปนี้:

IFix nugetrestore --fix

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

IFix nugetrestore --check

1

ฉันมีปัญหาเดียวกัน สิ่งที่ฉันทำคือ: 1) ไปที่แต่ละโครงการไฟล์. csproj ในโซลูชันเปิดใน notepad แล้วลบส่วนของ xml และบันทึก

2) จากนั้นฉันลบไฟล์ package.config ทั้งหมดในโซลูชันทั้งหมด

3) จากนั้นฉันต้องลบโฟลเดอร์. nuget และแพ็คเกจออก

เมื่อมาถึงจุดนี้ฉันมีโซลูชันฟรีของ NuGet อย่างสมบูรณ์

4) จากนั้นฉันอ้างถึง DLLs ที่จำเป็นและกดคอมไพล์ด้วยตนเองและวิธีการแก้ปัญหาก็ทำงานได้เหมือนแชมป์โดยไม่ต้องใช้แพ็คเกจ NuGet


1

ไปที่ไดเร็กทอรีโซลูชันของคุณที่คุณมี[$(SolutionDir)\.nuget\nuget.targets] .nugetโฟลเดอร์และnuget.targetsไฟล์อยู่ข้างใต้ลบโฟลเดอร์และเปลี่ยนลบบรรทัดจากcsprojของคุณเป็นครั้งสุดท้าย

ปัญหาจะไม่กลับมาที่ข้อผิดพลาดคุณอีกครั้ง



0

ฉันเปิดใช้งานตัวเลือก "คืนค่าแพคเกจ" โดยบังเอิญขณะเปิดโครงการใน VS2012 RC และเริ่มได้รับข้อผิดพลาดที่ดูเหมือน:

"ข้อผิดพลาด 1 ไม่พบ 'C: \ FolderX \ SomeProject.nuget \ nuget.exe'"

เพื่อแก้ไขข้อผิดพลาดฉันทำตามคำแนะนำข้างต้นเปิดเปิดแต่ละไฟล์โครงการใน Notepad และลบบรรทัด RestorePackage นั้น


0

ฉันสามารถแก้ไขปัญหานี้ได้โดยทำตามขั้นตอนเหล่านี้:

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

2) ลบโฟลเดอร์โซลูชันออกจาก C: \ (เส้นทางที่แมปกับ TFS)

3) รับล่าสุดจาก TFS สำหรับการแก้ปัญหาของคุณ

4) คัดลอก (ถ้ามี) การเปลี่ยนแปลงของคุณจากข้อมูลสำรองที่คุณทำในขั้นตอนที่ 1

หวังว่าจะช่วยได้!


-2

ฉันพบปัญหาเดียวกันและพยายามลบแท็ก. nuget และ RestorePackage ทั้งหมดออกจากไฟล์โครงการ แต่โครงการหนึ่งเพิ่งจะโหลดซ้ำไม่ว่าฉันจะตรวจสอบแท็ก. nuget และ RestorePackages อย่างละเอียดเพียงใด ฉันเดาว่ามีบางแหล่งอ้างอิงที่ซ่อนอยู่ที่นี่

ในท้ายที่สุดมันง่ายกว่าเพียงแค่คัดลอกไฟล์และสร้างโครงการใหม่และนำเข้าสู่โซลูชัน


-8

Nuget sucks เพียงแค่ลบ nugets และลบหรือแสดงความคิดเห็นองค์ประกอบแพคเกจจาก packages.config ในไดเรกทอรีรากของโครงการที่เป็นปัญหา ใช้การอ้างอิงโดยตรงไปยังโฟลเดอร์ lib แทน

<?xml version="1.0" encoding="utf-8"?>
  <packages>
    <!--<package id="EntityFramework" version="6.0.2" targetFramework="net45" />-->
  </packages>

มัน 'แย่มาก' เช่นเดียวกับผลิตภัณฑ์อื่น ๆ ถ้าคุณไม่รู้วิธีใช้และไม่พยายามทำความเข้าใจ
Wiebe Tijsma

นั่นเป็นเรื่องจริง แต่ใน optinion ของฉันที่ถูกผลักออกมาไม่ได้ทำให้คุณสามารถควบคุมโครงการของคุณได้มากพอ Nuget GUI ต้องการการอัพเกรดที่จริงจังเช่นกัน 1. มันใช้งานง่าย, 2. มันยากที่จะจัดการแพคเกจ 3. มันยากที่จะปิดการคืนค่า 4. ดาวน์โหลดแพคเกจที่ไม่จำเป็น 5. บางครั้งมันไม่สามารถที่จะคืนค่า pacakges
Igor N

ฉันเห็นด้วยในระดับหนึ่ง แต่ฉันคิดว่าจริง ๆ แล้วมันไม่มีเต้นผู้จัดการแพคเกจเลย ดูเหมือนว่าพวกเขากำลังทำการอัพเกรด GUI อย่างจริงจังสำหรับ nuget 3.0: blog.nuget.org/20141112/nuget-3.0-preview.html
Wiebe Tijsma
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.