NuGet auto package restore ไม่ทำงานกับ MSBuild


111

ฉันกำลังพยายามสร้างโซลูชันที่packagesไม่มีเนื้อหา (ยกเว้นrepositories.configภายใน) ด้วย MSBuild 12.0 ฉันคาดหวังว่ามันจะกู้คืนแพ็คเกจที่หายไปทั้งหมดโดยอัตโนมัติก่อนสร้าง แต่ไม่เป็นเช่นนั้น - MsBuild รายงานข้อผิดพลาดมากมาย:

"คุณขาดคำสั่งการใช้หรือการอ้างอิงการประกอบหรือไม่"

NuGet Manager คือ 2.7 (ฉันเห็นสิ่งนี้ใน Visual Studio 2013 เกี่ยวกับกล่อง) ฉันพยายามส่งผ่านEnableNuGetPackageRestore=trueพารามิเตอร์ - ไม่มีโชค ฉันขาดอะไรไป?


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

1
ไม่ฉันใช้ MsBuild ( msdn.microsoft.com/en-us/library/hh162058.aspx ) เวอร์ชันล่าสุดจากบรรทัดคำสั่ง อัปเดต Nuget จากภายใน VS เป็น 2.8 - ไม่มีโชค
UserControl

3
MSBuild เพียงอย่างเดียวจะไม่คืนค่าและ VS addin ด้วย คุณต้องเปิดใช้งานการกู้คืนแพ็คเกจตามที่ @KMoraz กล่าวจากนั้น Sumeshk กล่าวว่าโฟลเดอร์. nuget จะปรากฏขึ้นและสามารถกู้คืนแพ็คเกจได้ ตรวจสอบให้แน่ใจว่าคุณได้ตรวจสอบ. รับในการควบคุมแหล่ง
Lex Li

คำตอบ:


36

อัปเดตด้วยเอกสาร NuGet อย่างเป็นทางการล่าสุดเมื่อ v3.3.0

แนวทางการคืนค่าแพ็คเกจ

NuGet มีสามวิธีการใช้แพคเกจการเรียกคืน


Automatic Package Restoreเป็นแนวทางที่ทีม NuGet แนะนำสำหรับ Package Restore ภายใน Visual Studio และได้รับการแนะนำใน NuGet 2.7 เริ่มต้นด้วย NuGet 2.7 ส่วนขยาย NuGet Visual Studio จะรวมเข้ากับเหตุการณ์การสร้างของ Visual Studio และเรียกคืนแพ็คเกจที่ขาดหายไปเมื่อการสร้างเริ่มต้นขึ้น คุณลักษณะนี้จะเปิดใช้งานโดยค่าเริ่มต้น แต่นักพัฒนาสามารถเลือกไม่ใช้ได้หากต้องการ


นี่คือวิธีการทำงาน:

  1. ในการสร้างโครงการหรือโซลูชัน Visual Studio จะเพิ่มเหตุการณ์ที่การสร้างกำลังเริ่มต้นภายในโซลูชัน
  2. NuGet ตอบสนองต่อเหตุการณ์นี้และตรวจสอบไฟล์ package.config ที่รวมอยู่ในโซลูชัน
  3. สำหรับแต่ละไฟล์ package.config ที่พบแพ็กเกจจะถูกแจกแจงและตรวจสอบแล้วว่ามีอยู่ในโฟลเดอร์แพ็กเกจของโซลูชัน
  4. แพ็กเกจที่ขาดหายไปจะดาวน์โหลดจากแหล่งแพ็กเกจที่กำหนดค่า (และเปิดใช้งาน) ของผู้ใช้ตามลำดับของแหล่งแพ็กเกจ
  5. เมื่อดาวน์โหลดแพ็กเกจแล้วแพ็กเกจจะแตกไฟล์ลงในโฟลเดอร์แพ็กเกจของโซลูชัน

หากคุณติดตั้ง Nuget 2.7+ สิ่งสำคัญคือต้องเลือกวิธีการหนึ่งสำหรับ> การจัดการการคืนค่าแพ็คเกจอัตโนมัติใน Visual Studio

มีสองวิธี:

  1. (Nuget 2.7+): Visual Studio -> Tools -> Package Manager -> Package Manager Settings -> Enable Automatic Package Restore
  2. (Nuget 2.6 และต่ำกว่า) คลิกขวาที่โซลูชันแล้วคลิก "เปิดใช้งานการคืนค่าแพ็คเกจสำหรับโซลูชันนี้"


Command-Line Package Restoreเป็นสิ่งจำเป็นเมื่อสร้างโซลูชันจากบรรทัดคำสั่ง ได้รับการแนะนำใน NuGet เวอร์ชันแรก แต่ได้รับการปรับปรุงใน NuGet 2.7

nuget.exe restore contoso.sln

วิธีการคืนค่าแพคเกจรวม MSBuildคือการใช้งาน Package Restore ดั้งเดิมและแม้ว่าจะยังคงใช้งานได้ในหลายสถานการณ์ แต่ก็ไม่ครอบคลุมสถานการณ์ทั้งหมดที่กล่าวถึงโดยอีกสองวิธี


63
nuget ไม่แนะนำอีกต่อไป ดูเอกสาร docs.nuget.org/docs/workflows/…
Owen Johnson

@OwenJohnson เอกสารนั้นไม่ได้ลงวันที่ที่ฉันสามารถดูได้และฉันไม่เห็นว่ามันบอกว่าไม่แนะนำตอนนี้? ฉันใช้ VS2013 และปุ่มนั้นดูเหมือนจะใช้งานได้ดี ฉันไม่พบปัญหาที่อ้างถึง "ดังนั้นคุณจึงคลิก" เปิดใช้งาน Nuget Package Restore "และตอนนี้สิ่งต่างๆของคุณไม่ได้สร้างขั้นตอนในการแก้ไขนั้นเจ็บปวด แต่เจ็บปวดน้อยกว่าด้วยสคริปต์นี้" github.com/owen2/ AutomaticPackageRestoreMigrationScriptบางทีมีเอกสารอื่นที่อธิบายเรื่องนี้เพิ่มเติม
AnneTheAgile

5
การคืนค่าแพ็กเกจอัตโนมัติจะแทนที่การกู้คืนแบบรวม ms-build เอกสารนี้คือคำแนะนำเกี่ยวกับวิธีการอัพเกรด หากคุณไม่มีปัญหากับวิธีการรวม msbuild คุณไม่จำเป็นต้องทำอะไร ในกรณีที่ง่ายที่สุดมันใช้งานได้ แต่ถ้าคุณมีเซิร์ฟเวอร์ CI การอ้างอิงโปรเจ็กต์ที่แชร์หรือเงื่อนไขอื่น ๆ คุณอาจเหยียบกับทุ่นระเบิดที่น่ารังเกียจและมีคำใบ้ไม่ถูกต้องหรือปัญหาอื่น ๆ
Owen Johnson

1
เมื่อใช้คำตอบนี้และทำตามคำแนะนำ "ลบของเก่า" "ดำเนินการย้ายข้อมูล" ที่docs.nuget.org/consume/package-restore/…ฉันก็พบว่าประสบความสำเร็จ
granadaCoder

ดูเหมือนว่าสิ่งต่างๆจะเปลี่ยนไปอีกครั้งกับ NuGet 4 และ. net มาตรฐาน
Owen Johnson

239

หากคุณใช้ Visual Studio 2017 หรือใหม่กว่าซึ่งมาพร้อมกับ MSBuild 15 หรือใหม่กว่าและไฟล์. csproj ของคุณอยู่ในรูปแบบใหม่PackageReferenceวิธีที่ง่ายที่สุดคือใช้ MSBuild Restoreเป้าหมายใหม่


ไม่มีใครตอบคำถามเดิมซึ่งก็คือ "ฉันจะรับแพ็คเกจ NuGet เพื่อกู้คืนอัตโนมัติเมื่อสร้างจากบรรทัดคำสั่งด้วย MSBuild ได้อย่างไร" คำตอบคือ: เว้นแต่คุณจะใช้ตัวเลือก "เปิดใช้งานการคืนค่าแพ็คเกจ NuGet" (ซึ่งตอนนี้เลิกใช้แล้วตามข้อมูลอ้างอิงนี้ ) คุณจะทำไม่ได้ (แต่ดูด้านล่าง) หากคุณกำลังพยายามทำเช่นการสร้างอัตโนมัติบนเซิร์ฟเวอร์ CI สิ่งนี้จะแย่มาก

อย่างไรก็ตามมีวิธีอ้อมเล็กน้อยเพื่อให้ได้พฤติกรรมที่ต้องการ:

  1. ดาวน์โหลด NuGet เวอร์ชันล่าสุดจากhttps://dist.nuget.org/win-x86-commandline/latest/nuget.exeและวางไว้ที่ใดที่หนึ่งใน PATH ของคุณ (คุณสามารถทำได้โดยเป็นขั้นตอนก่อนสร้าง)
  2. เรียกใช้nuget restoreซึ่งจะดาวน์โหลดแพ็คเกจที่หายไปทั้งหมดโดยอัตโนมัติ
  3. เรียกใช้msbuildเพื่อสร้างโซลูชันของคุณ

นอกเหนือ: nuget.exeในขณะที่วิธีการใหม่และแนะนำให้ทำแพคเกจอัตโนมัติเรียกคืนเกี่ยวข้องกับความยุ่งเหยิงน้อยลงในการควบคุมเวอร์ชันของคุณก็ยังทำแพคเกจบรรทัดคำสั่งเรียกคืนเป็นไปไม่ได้นอกเสียจากคุณจะกระโดดผ่านห่วงพิเศษของการดาวน์โหลดและใช้งาน ความคืบหน้า?


ลงเอยด้วยวิธีแก้ปัญหาที่คล้ายกัน (แต่วางไว้nuget.exeที่ / trunk / ext) ก้าวไปข้างหน้าหนึ่งก้าว - ถอยหลังสองก้าว :(
UserControl

40
นี่ควรเป็นท่าเทียบเรือที่ถูกต้องไม่ใช่ที่ทำเครื่องหมาย
Woland

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

2
ฉันใช้เจนกินส์และต้องทำสิ่งนี้มันเป็นขั้นตอนการสร้างง่ายๆก่อนที่จะเรียก msbuild - ไฟล์แบตช์ของ Windows เป็นประเภทขั้นตอนการสร้างและ: cmd.exe / c "C: \ Program Files \ nuget \ nuget.exe" คืนค่า < RelativePathToSln> .sln - ฉันใช้เส้นทางไปยัง SLN เป็นนิสัย / ขั้นตอนในกรณีที่ไม่พบไฟล์ sln
Steve Radich-BitShop.com

1
วิธีนี้ใช้ได้ผลกับฉันเมื่อตั้งค่าการกู้คืนในบิลด์เจนกินส์ กุญแจสำคัญอย่างหนึ่งสำหรับฉันคือ NuGet.Config ต้องอยู่ในไดเร็กทอรีเดียวกับไฟล์. SLN ของฉัน ไม่มีการรวมตำแหน่งไฟล์กำหนดค่าอื่น ๆ รวมถึงการระบุ -ConfigFile บนบรรทัดคำสั่งจะใช้งานได้
Guerry

56

การคืนค่าแพ็คเกจอัตโนมัติของ Nuget เป็นคุณลักษณะของ Visual Studio (เริ่มในปี 2013) ไม่ใช่ MSBuild คุณจะต้องเรียกใช้nuget.exe restoreหากคุณต้องการกู้คืนแพ็กเกจจากบรรทัดคำสั่ง

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


2
คุณต้องเรียกใช้ "nuget update -self" ก่อนที่จะใช้คำสั่ง restore หากเวอร์ชัน NuGet ของคุณไม่น้อยกว่า 2.7 NuGet ของฉันเป็นเวอร์ชัน 2.1 และไม่รู้จักคำสั่ง "คืนค่า" ก่อนอัปเดต
Teknikaali

2
"ทำให้เกิดปัญหาหากคุณสร้างโครงการเหล่านั้นในโซลูชันอื่น" ฉันยังไม่พบปัญหาใด ๆ และเรามี 3 วิธีแก้ปัญหาโดยแต่ละโครงการหลายสิบโครงการ บางทีฉันอาจจะโชคดี?
Nelson Rothermel

@NelsonRothermel สถานการณ์ปัญหาที่น่าสังเกตมากที่สุดที่อาจเกิดขึ้นคือโครงการที่อ้างถึง dlls ที่ส่งโดย nuget ไปยังโฟลเดอร์แพ็คเกจของโซลูชันจากต่างประเทศซึ่งอาจไม่พร้อมใช้งานเมื่อคุณสร้างโซลูชัน
Owen Johnson

2
@OwenJohnson เรามีโฟลเดอร์แพ็คเกจทั่วไปหนึ่งโฟลเดอร์สำหรับโซลูชันทั้งหมดนั่นอาจเป็นสาเหตุที่เราไม่พบปัญหา
Nelson Rothermel

17

ฉันใช้เวลาพอสมควรในการหาภาพรวมและฉันต้องการแบ่งปันที่นี่

Visual Studio มีสองวิธีในการใช้การคืนค่าแพคเกจ: การคืนค่าแพ็คเกจอัตโนมัติและการกู้คืนแพ็คเกจ MSBuild-Integrated 'MSBuild-Integrated Package Restore' จะกู้คืนแพ็กเกจระหว่างกระบวนการสร้างที่อาจทำให้เกิดปัญหาในบางสถานการณ์ 'การคืนค่าแพ็คเกจอัตโนมัติ' เป็นแนวทางที่แนะนำโดยทีมงาน NuGet

มีหลายขั้นตอนในการทำให้ 'Automatic Package Restore' ทำงานได้:

  1. ใน Visual Studio, Tools -> Extensions and Updates, อัพเกรด NuGet หากมีเวอร์ชันที่ใหม่กว่า (เวอร์ชัน 2.7 หรือใหม่กว่า)

  2. หากคุณใช้ TFS ในโฟลเดอร์. nuget ของโซลูชันของคุณให้ลบไฟล์ NuGet.exe และ NuGet.targes จากนั้นแก้ไข NuGet.Config เพื่อไม่ตรวจสอบในแพ็คเกจ NuGet:

    <configuration>  
      <solution>  
        <add key="disableSourceControlIntegration" value="true" />  
      </solution>  
    </configuration> 

    หากคุณเคยตรวจสอบในโฟลเดอร์แพ็กเกจของโซลูชันเป็น TFS ก่อนหน้านี้ให้ลบโฟลเดอร์และตรวจสอบในการลบการลบโฟลเดอร์แพ็คเกจ

    หากคุณไม่ได้ใช้ TFS ให้ลบโฟลเดอร์. nuget

  3. ในแต่ละไฟล์โปรเจ็กต์ (.csproj หรือ. vbproj) ในโซลูชันของคุณให้ลบบรรทัดที่อ้างอิงไฟล์ NuGet.targets การอ้างอิงมีลักษณะดังนี้:

    <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />

    ลบบรรทัดนี้ในทุกไฟล์โครงการในโซลูชันของคุณ

  4. ในเมนู Visual Studio ไม่ว่าจะผ่าน

    Tools -> Options -> Package Manager -> General หรือ Tools -> NuGet Package Manager -> Package Manager Settings

    โปรดเปิดใช้งานสองตัวเลือกต่อไปนี้ 1) 'อนุญาตให้ NuGet ดาวน์โหลดแพ็คเกจที่ขาดหายไป' 2) 'ตรวจสอบแพ็คเกจที่ขาดหายไปโดยอัตโนมัติระหว่างการสร้างใน Visual Studio'

  5. ทดสอบการกำหนดค่าการคืนค่าแพ็คเกจของคุณตามขั้นตอนต่อไปนี้

    • บันทึกโซลูชันของคุณและปิด Visual Studio
    • ลบโฟลเดอร์แพ็คเกจของโซลูชันของคุณ
    • เริ่ม Visual Studio เปิดโซลูชันของคุณและสร้างใหม่

1
หนึ่งในขั้นตอนของคุณคือการลบ <Import Project = "$ (MSBuildToolsPath) \ Microsoft.CSharp.targets" /> ทำไมคุณจะทำเช่นนั้น?
Ibrahim Hashimi

3
ฉันคิดว่าคุณเข้าใจผิดว่าอยู่ในเทมเพลตนั้นเอง หากไม่มีไฟล์ต้นฉบับของคุณจะไม่ถูกสร้างขึ้นเลย
Ibrahim Hashimi

3
ฉันคิดว่าเขาหมายถึง nuget.targets แทนที่จะเป็น Microsoft.CSharp.targets
Owen Johnson

2
docs.nuget.org/docs/workflows/… <- นี่คือเอกสารอย่างเป็นทางการของสิ่งที่ Ying พยายามจะพูด
Owen Johnson

1
ยิ่งพูดถูก ... สิ่งที่ทุกคนเพิกเฉยคือความจริงที่ว่าการสร้างการผสานรวมแบบต่อเนื่องจะสร้างพื้นที่ทำงานชั่วคราวของตนเองหลังจากเหตุการณ์ที่สร้างไว้ล่วงหน้ารับแหล่งที่มาจากนั้นสำลักการอ้างอิงของ NuGet นี่คือการแก้ไขสำหรับระบบสร้าง TFS อัตโนมัติ
CZahrobsky

5

MSBuild 15 มีตัวเลือก a / t: restoreที่ทำเช่นนี้ มาพร้อมกับ Visual Studio 2017

หากคุณต้องการใช้สิ่งนี้คุณต้องใช้PackageReferenceใหม่ซึ่งหมายถึงการแทนที่packages.configไฟล์ด้วยองค์ประกอบเช่นนี้ (ทำใน * .csproj):

<ItemGroup>
  <!-- ... -->
  <PackageReference Include="Contoso.Utility.UsefulStuff" Version="3.6.0" />
  <!-- ... -->
</ItemGroup>

มีการย้ายข้อมูลไปยังรูปแบบนี้โดยอัตโนมัติหากคุณคลิกขวาที่ 'การอ้างอิง' (อาจไม่ปรากฏขึ้นหากคุณเพิ่งเปิดสตูดิโอภาพสร้างใหม่หรือเปิดหน้าต่าง 'จัดการแพ็คเกจ NuGet สำหรับโซลูชัน' และจะเริ่มปรากฏขึ้น)


คุณต้องพิจารณาว่าตัวเลือกการคืนค่าของ msbuild มีความแตกต่างเล็กน้อยจาก nuget restore - ดูgithub.com/NuGet/Home/issues/7651#issuecomment-500842049เช่น
Matthieu

4

Ian Kemp มีคำตอบ (มีบางประเด็น .. ) นี่คือการเพิ่มเนื้อสัตว์ในขั้นตอนหนึ่งของเขา

เหตุผลที่ฉันลงเอยที่นี่คือเครื่องของ dev กำลังสร้างได้ดี แต่เซิร์ฟเวอร์ที่สร้างไม่ได้ดึงแพ็คเกจที่ต้องการ (โฟลเดอร์แพ็คเกจว่าง) ดังนั้นการสร้างจึงล้มเหลว อย่างไรก็ตามการล็อกเข้าสู่บิลด์เซิร์ฟเวอร์และการสร้างโซลูชันด้วยตนเองได้ผล

ในการทำตามขั้นตอนที่สองของ Ians 3 จุด (เรียกใช้nuget restore ) คุณสามารถสร้างเป้าหมาย MSBuild ที่เรียกใช้คำสั่ง exec เพื่อรันคำสั่ง nuget restore ดังต่อไปนี้ (ในกรณีนี้ nuget.exe อยู่ในโฟลเดอร์. nuget แทน บนเส้นทาง) ซึ่งสามารถเรียกใช้ในขั้นตอนการสร้าง TeamCity (CI อื่น ๆ ที่มี ... ) ได้ทันทีก่อนสร้างโซลูชัน

<Target Name="BeforeBuild">
  <Exec Command="..\.nuget\nuget restore ..\MySolution.sln"/>
</Target>

สำหรับบันทึกฉันได้ลองรันเนอร์ประเภท "nuget installer" แล้ว แต่ขั้นตอนนี้แขวนอยู่ในโครงการเว็บ (ใช้ได้กับโครงการ DLL และ Windows)


1
หากคุณสร้างจากชุดรหัสใหม่ (CI) อยู่ตลอดเวลานี่คือวิธีที่จะไป
Jahmic

1
ฉันชอบแนวทางนี้เพราะรับประกันว่าแต่ละโซลูชัน / โครงการต้องอาศัยเวอร์ชันของ nuget ที่สร้างขึ้นด้วย ในเวลาที่กำหนดสิ่งนี้สามารถพิสูจน์ได้ว่ามีความสำคัญหากคุณทำงานใน บริษัท ที่มีโครงการเก่าซึ่งสร้างขึ้นโดยใช้ nuget เวอร์ชันเก่า นักพัฒนาสามารถรักษาโปรเจ็กต์ดังกล่าวได้โดยไม่ต้องกังวลว่า nuget.exe ทั้งระบบจะทำลายสิ่งต่าง ๆ หรือไม่เนื่องจากแต่ละโปรเจ็กต์มี "รสชาติในท้องถิ่น" ของ nuget.exe เคล็ดลับสุดท้ายเป็นที่น่าสังเกตว่าด้วย nuget 3.x + เราสามารถกู้คืนแพ็คเกจเช่นนี้ได้: nuget.exe restore package.config -PackagesDirectory path \ to \ package
XDS

1
ปัญหาที่ฉันมีกับวิธีนี้คือคุณจะต้องแก้ไขไฟล์โครงการที่ตามมาเพื่อเพิ่มขั้นตอนการคืนค่า คุณสามารถเพิ่มกิจกรรม "InvokeProcess" ใน TFS2012 หรือกิจกรรม "NuGetRestore" ในเทมเพลตการสร้าง TFS2013 เพื่อให้ขั้นตอนนี้ดำเนินการบนเซิร์ฟเวอร์การสร้าง สำหรับ InvokeProcess ให้ส่งผ่านแอตทริบิวต์ "SourcesDirectory" ในปี 2012 ใน TFS 2013 เพียงกรอกค่าตามต้องการ มีบล็อกมากมายเกี่ยวกับการทำเช่นนี้
Neville

3

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


2

มีความเป็นpackages.configไฟล์ที่มีโครงการจะมีรายละเอียดแพคเกจ

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


2
ไม่มี.nugetโฟลเดอร์และไม่เคยเป็น packages.configไฟล์ทั้งหมดในโฟลเดอร์โครงการอยู่ในตำแหน่ง
UserControl

ฉันคิดว่า NuGet.exe และ NuGet.targets จะกู้คืนแพ็คเกจที่หายไปทั้งหมดโดยอัตโนมัติในขณะที่สร้างแอปและคุณทำไฟล์ NuGet.exe และ NuGet.targets หายนั่นทำให้เกิดข้อผิดพลาด
Sumeshk

ขอบคุณ - ฉันขอขอบคุณสำหรับความช่วยเหลือ!
UserControl

โฟลเดอร์. nuget เป็นโฟลเดอร์ที่สร้างขึ้นของ Visual Studio ซึ่งจะปรากฏเฉพาะเมื่อคุณเปิดใช้งานการคืนค่าแพ็คเกจอัตโนมัติ มีประโยชน์ที่จะมี nuget.exe ในรหัส repo ของคุณเนื่องจากคุณสามารถอ้างอิงได้ในบิลด์ของคุณเช่นเดียวกับ nuget.config (โดยเฉพาะอย่างยิ่งหากคุณต้องการรับแพ็คเกจจากหลาย repos)
MytyMyky

2

บางครั้งสิ่งนี้เกิดขึ้นเมื่อคุณมีโฟลเดอร์ของแพ็กเกจที่คุณพยายามกู้คืนภายในโฟลเดอร์ "แพ็กเกจ" (เช่น"แพ็คเกจ / EntityFramework.6.0.0 /" ) แต่ "DLL" ไม่อยู่ในนั้น (ตัวควบคุมเวอร์ชันส่วนใหญ่ ระบบจะละเว้นไฟล์ ".dll" โดยอัตโนมัติ) สิ่งนี้เกิดขึ้นเนื่องจากก่อนที่ NuGet จะพยายามกู้คืนแต่ละแพ็กเกจจะตรวจสอบว่ามีโฟลเดอร์อยู่แล้วหรือไม่ดังนั้นหากมีอยู่ NuGet จะถือว่า "dll" อยู่ภายใน ดังนั้นหากนี่เป็นปัญหาสำหรับคุณเพียงแค่ลบโฟลเดอร์ที่ NuGet จะกู้คืนอย่างถูกต้อง


1
สำหรับ VS 2015 และ TFS สิ่งนี้จะช่วยคุณได้ ปัญหานี้จะเป็นการอ้างอิงที่ไม่ได้รับการแก้ไขและบ่อยครั้งที่ปัญหาคือแพคเกจ nuget ไม่ได้รับการกู้คืนเนื่องจากโฟลเดอร์สำหรับแพ็คเกจนั้นมีอยู่แล้วในโฟลเดอร์แพ็กเกจ แต่แพ็คเกจยังไม่ได้รับการขยายอย่างสมบูรณ์ (เช่นไม่มีโฟลเดอร์ lib ซึ่งควรมี. dll) ลบทั้งโฟลเดอร์สำหรับแพ็คเกจภายในแพ็คเกจจากนั้นคลิกขวาที่ระดับโซลูชันและเลือกที่จะกู้คืนแพ็คเกจ
Greg

1

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

ฉันทำตามคำแนะนำจาก Microsoftและขั้นตอนสำคัญคือการอัปเดต NuGet config %AppData%/NuGetเพื่อให้มี:

<configuration>
    <packageRestore>
        <add key="automatic" value="True" />
    </packageRestore>
</configuration>

ดังนั้นฉันจึงตรวจสอบว่าเมื่อคุณเปลี่ยนการตั้งค่าใน Visual Studio (คำตอบส่วนใหญ่อยู่ที่นี่) .... ข้างต้นคือสิ่งที่เปลี่ยนแปลงไป "คีย์" อีกอันคือ <add key = "enable" value = "False" />
granadaCoder

0

ใน Visual Studio 2017 - เมื่อคุณคอมไพล์โดยใช้ IDE - จะดาวน์โหลดแพ็กเกจ nuget ที่หายไปทั้งหมดและบันทึกในโฟลเดอร์ "แพ็กเกจ"

แต่ในการคอมไพล์เครื่อง build ทำได้โดยใช้ msbuild.exe ในกรณีนั้นฉันดาวน์โหลด nuget.exe และเก็บไว้ในเส้นทาง

ในแต่ละขั้นตอนการสร้างก่อนที่จะดำเนินการ msbuild.exe มันจะดำเนินการ -> nuget.exe คืนค่า NAME_OF_SLN_File (หากมีไฟล์. SLN เพียงไฟล์เดียวคุณสามารถละเว้นพารามิเตอร์นั้นได้)


0

คุณยังสามารถใช้

Update-Package -reinstall

เพื่อกู้คืนแพ็คเกจ NuGet บนคอนโซลการจัดการแพ็คเกจใน Visual Studio


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