โครงการนี้อ้างอิงแพคเกจ NuGet ที่หายไปในคอมพิวเตอร์นี้


313

ฉันมีแอปพลิเคชัน ASP.NET MVC5 ที่ทำงานเมื่อวานและตอนนี้ฉันได้รับข้อผิดพลาดนี้เมื่อฉันพยายามสร้าง:

โครงการนี้อ้างอิงแพคเกจ NuGet ที่หายไปในคอมพิวเตอร์นี้

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


1
ฉันได้เปิดใช้งานการคืนค่า nuget ด้วยการคลิกขวาที่โครงการและเลือกตัวเลือกนั้น จากนั้นเพิ่มโฟลเดอร์ nuget และสามรายการในโฟลเดอร์นั้นและไม่ทำอะไรเลยเพื่อแก้ไขปัญหา ฉันได้ลองสร้างใหม่และยังได้รับข้อผิดพลาดเดิมด้านบน
Austin Harris

โซลูชันของคุณมีโฟลเดอร์. nuget และคุณได้ทำการอัพเดท NuGet เป็นเวอร์ชั่นล่าสุดหรือไม่? ดูที่นี่: stackoverflow.com/questions/18833649/…
David Brabant

ใช่ลองและไม่ได้แก้ปัญหาข้อความแสดงข้อผิดพลาดในการสร้างของฉัน
Austin Harris

สาเหตุของข้อผิดพลาดนี้ก็คือThe operation has timed out.ข้อผิดพลาด ระหว่างการสร้าง คุณต้องตรวจสอบบันทึกการทำงานของคุณหรือแท็บการวินิจฉัยในหน้าจอข้อมูล Visual Studio Online Build Failed
Joshua Drake

วิธีการแก้ปัญหาไม่ทำงานสำหรับฉัน ฉันกำลังดาวน์โหลดจาก repo และแพ็กเกจคืนค่าในโครงสร้างไฟล์ที่ถูกต้องสำหรับโครงการแรกโครงการที่สองไม่สามารถค้นหาได้ การตรวจสอบ. csproj แสดงให้เห็นว่ามีการใช้เส้นทางสัมพัทธ์ที่ถูกต้องดังนั้นฉันจึงสูญเสียความพยายามที่จะแก้ปัญหานี้ github.com/DanJ210/ProgrammersTest
Daniel Jackson

คำตอบ:


463

ในกรณีของฉันฉันต้องลบสิ่งต่อไปนี้ออกจากไฟล์. csproj:

<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
<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>

อันที่จริงแล้วในตัวอย่างนี้คุณสามารถดูว่าข้อความแสดงข้อผิดพลาดมาจากที่ใด

ฉันกำลังแปลงจากการคืนค่าแพคเกจ MSBuild รวมถึงการคืนค่าแพคเกจอัตโนมัติ ( http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore )


12
สิ่งนี้ใช้ได้ผลสำหรับฉัน แต่ฉันต้องการเพียงลบองค์ประกอบ <Target> </Target> เท่านั้น VS [2013] ดูเหมือนจะกู้คืนถ้าฉันลบองค์ประกอบ <Import> เช่นกัน
Robert Taylor

3
เรื่องนี้ไม่น่าเชื่ออย่างจริงจัง เหตุใด Microsoft จึงทำให้ทุกสิ่งยากลำบาก
dimiguel

11
ถ้าสิ่งนี้สามารถลบออกได้ทำไมมันมีที่แรก
OK999

1
OK9999 ณ จุดหนึ่งคุณต้องเปิดใช้งานจาก Visual Studio รุ่นก่อนหน้าโดยคลิกขวาบนโซลูชันและเลือก "เปิดใช้งานแพคเกจ NuGet คืนค่า" ซึ่งทำได้เหมือนเดิม เราไม่ต้องการสิ่งนั้นอีกต่อไป
Loren Paulsen

3
ฉันรักโซลูชันที่เกี่ยวข้องกับการลบสิ่งต่าง ๆ เท่านั้น
ทอดด์ Menier

86

ทางออกหนึ่งคือการลบออกจากไฟล์. csproj ต่อไปนี้:

<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
<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>

อย่างไร?

  1. คลิกขวาที่โครงการ ยกเลิกการโหลดโครงการ
  2. คลิกขวาที่โครงการ แก้ไข csproj
  3. ลบส่วนออกจากไฟล์ บันทึก
  4. คลิกขวาที่โครงการ โหลดโครงการอีกครั้ง

เมื่อคุณย้ายโปรเจ็กต์จากที่หนึ่งไปอีกที่หนึ่งจะได้ผลดี
Dean Seo

4
@IvanSantiago ตอบแล้วข้างต้นด้วยโซลูชันเดียวกัน! ..โหวตลง! ..
แจ็ค

2
@ClintEastwood คำตอบของฉันอธิบายวิธีการทำ นั่นคือความแตกต่าง หากผู้ใช้ที่กำลังมองหาวิธีการคำตอบของฉันก็มีในทางตรงกันข้ามกับคำตอบดังกล่าวข้างต้น
Ivan Santiago

2
@IvanSantiago คุณสามารถ: เพิ่มเป็นความคิดเห็นหรือแก้ไขคำตอบเดิมด้วยวิธีการ
โคลิน

50

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

ดังนั้นฉันจึงต้องแก้ไขรายการทั้งหมดที่คล้ายกับรายการต่อไปนี้ใน.csprojไฟล์ของฉันจาก

  <Import Project="..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets" Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" />

ถึง

  <Import Project="packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets" Condition="Exists('packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" />

(หมายเหตุการเปลี่ยนแปลงจาก..\packages\ไปpackages\. มันอาจจะเป็นญาติโครงสร้างที่แตกต่างกันในกรณีของคุณ แต่คุณได้รับความคิด.)


3
ปัญหาที่คล้ายกัน .... ฉันได้ย้ายไฟล์. csproj ในระดับหนึ่งขึ้นในโครงสร้างไดเรกทอรีและต้องเปลี่ยนจาก ".. \ .. \ packages \ ... " เป็น ".. \ packages \ ... "
tmgirvin

2
ฉันมีปัญหาที่คล้ายกัน แต่แปลกจริง ๆ ฉันใช้มันในโมดูลย่อยดังนั้นจึงเป็นเรื่องปกติในโซลูชันนั้น แต่เมื่อฉันอ้างอิงโซลูชันนั้นจากโซลูชันอื่นแพคเกจนั้นอยู่ในที่ที่แตกต่างกัน ฉันเปลี่ยน .. \ packages เป็น $ (SolutionDir) แพ็คเกจตลอด. csproj และได้ทำการแก้ไข
JoeNCA

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

หมายความว่า. csproj ของคุณอยู่ในระดับเดียวกับไฟล์. sln ของคุณหรือไม่
Simon_Weaver

@Simon_Weaver ตำแหน่งของ.csprojญาติของคุณกับคุณ.slnไม่สำคัญในบริบทนี้ สิ่งสำคัญคือไม่ว่าอะไรก็ตามที่ถูกอ้างอิงในของคุณ.csprojได้ย้ายไปที่อื่น ถ้าเป็นเช่นนั้นคุณจะต้องแก้ไข หากคุณย้าย '.csproj' ไปกับทุกสิ่งที่อ้างอิงเหมือนเดิม แต่เก็บไว้ใน.slnตำแหน่งเดิมคุณจะต้องแก้ไข.slnไฟล์ไปยังตำแหน่งใหม่ของ.csproj-es แต่ไม่จำเป็นต้องแก้ไข.csprojไฟล์
Nikita G.

22

ฉันแก้ปัญหานี้ได้อย่างง่ายดายด้วยการคลิกขวาที่โซลูชันของฉันจากนั้นคลิกที่ตัวเลือกเปิดใช้งาน NuGet Package Restore

(PS: ตรวจสอบให้แน่ใจว่าคุณมีการติดตั้ง Nuget จากเครื่องมือ -> ส่วนขยายและการปรับปรุง -> Nuget Package Manager สำหรับ Visual Studio 2013 หากไม่ได้ติดตั้งส่วนขยายนี้ก่อน)

หวังว่ามันจะช่วย


7
นี่เป็นวิธีเก่าของการกู้คืนแพ็คเกจ nuget และควรหลีกเลี่ยง
มัฟฟินชาย

2
@ TheMuffinMan: คุณช่วยอธิบายให้ชัดเจนว่าทางใหม่คืออะไรและทำไมจึงควรหลีกเลี่ยงวิธีนี้ (พิจารณาว่าเอาต์พุตข้อผิดพลาด VS 2013 บอกให้คุณทำอย่างนั้น)?
CantrianBear

2
@CantrianBear นำทางไปยังหน้านี้docs.nuget.org/consume/package-restoreMSBuild-Integrated Package Restoreและหาส่วนที่เรียกว่า นั่นเป็นวิธีเก่าและแสดงเหตุผลบางประการว่าทำไมคุณควรใช้วิธีใหม่
มัฟฟินแมน

ดูบล็อกของ David Ebbo ได้ที่blog.davidebbo.com/2014/01/…ตอนนี้ ... "ตอนนี้ NuGet คืนค่าแพ็คเกจก่อนสร้างใน VS เสมอ"
timB33

17

ในกรณีของฉันมันเกี่ยวข้องกับเวอร์ชัน Microsoft.Build.Bcl เวอร์ชันแพคเกจ nuget ของฉันคือ 1.0.21 แต่ไฟล์โครงการของฉันยังคงชี้ไปที่รุ่น 1.0.14

ดังนั้นฉันจึงเปลี่ยนไฟล์. csproj ของฉันจาก:

  <Import Project="..\..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets" Condition="Exists('..\..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" />
   <Target Name="EnsureBclBuildImported" BeforeTargets="BeforeBuild" Condition="'$(BclBuildImported)' == ''">
    <Error Condition="!Exists('..\..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text="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=317567." HelpKeyword="BCLBUILD2001" />
    <Error Condition="Exists('..\..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text="The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568." HelpKeyword="BCLBUILD2002" />
  </Target>

ถึง:

 <Import Project="..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets" Condition="Exists('..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" />
  <Target Name="EnsureBclBuildImported" BeforeTargets="BeforeBuild" Condition="'$(BclBuildImported)' == ''">
    <Error Condition="!Exists('..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" Text="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=317567." HelpKeyword="BCLBUILD2001" />
    <Error Condition="Exists('..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" Text="The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568." HelpKeyword="BCLBUILD2002" />

และการสร้างก็ทำงานได้อีกครั้ง


11

หากคุณกำลังใช้ TFS

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

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

<RestorePackages>true</RestorePackages>  
...
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />  
...
<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>

หากคุณไม่ได้ใช้ TFS

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

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

<RestorePackages>true</RestorePackages>  
...
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />  
...
<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>

การอ้างอิง: การโอนย้ายโซลูชัน MSBuild แบบรวมเพื่อใช้การคืนค่าแพ็คเกจอัตโนมัติ


8

เป็นไปได้หรือไม่ที่แพคเกจได้รับการกู้คืนไปยังโฟลเดอร์ที่ไม่ถูกต้อง? ตรวจสอบว่าพา ธ ในไฟล์ csproj ถูกต้อง

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

<add key="repositoryPath" value="..\..\Packages" />

กำลังคืนค่าแพ็คเกจโดยโปรเจ็กต์ยังคงดูที่ตำแหน่งเดิม


1
ฉันเชื่อว่าอาจเป็นปัญหาพา ธ เนื่องจากฉันย้ายตำแหน่งของไฟล์ แต่ไม่เห็นว่ามีเส้นทางที่กำหนดไว้ที่ไหน ฉันดูในไฟล์ proj และไฟล์แพคเกจทั้งหมดดูเหมือนจะเป็นแบบนี้: <อ้างอิงรวม = "Antlr3.Runtime, เวอร์ชัน = 3.5.0.2, วัฒนธรรม = เป็นกลาง, PublicKeyToken = eb42632606e9261f, processorArchitecture = MSIL"> <SpecificVersion> เท็จ </SpecificVersion> <HintPath> .. \ packages \ Antlr.3.5.0.2 \ lib \ Antlr3.Runtime.dll </HintPath> </Reference>
Austin Harris

การเพิ่มสิ่งนี้ลงใน web.config ไม่ได้ช่วย: <add key = "repositoryPath" value = ".. \ .. \ Packages" />
Austin Harris

คุณไม่ต้องการที่จะเพิ่มเข้าไปใน web.config ฉันอ้างถึงไฟล์ NuGet.config และคุณต้องการตรวจสอบเส้นทางสัมพัทธ์ แพ็คเกจของคุณอยู่ที่ไหนเทียบกับไฟล์ csproj พวกเขาอยู่ใน .. \ แพ็คเกจหรือไม่ ดูเหมือนว่าแพ็กเกจจะได้รับการกู้คืนอย่างถูกต้อง แต่โครงการของคุณดูผิดที่
infojolt

6

ฉันมีปัญหาเดียวกัน ในกรณีของฉันติดตั้งแพคเกจMicrosoft.Bclildสร้างปัญหา


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

ใน1.0.21รุ่นที่ไม่มีไฟล์ในแพ็คเกจการติดตั้ง1.0.14เวอร์ชันจะแก้ไขสิ่งนี้
FLCL

4

ลบบรรทัดด้านล่างในไฟล์. csproj

<Import Project="$(SolutionDir)\.nuget\NuGet.targets" 
Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
<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>

3

ทางออกหนึ่งคือการลบออกจากไฟล์. csproj ต่อไปนี้:

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

โครงการนี้อ้างอิงแพคเกจ NuGet ที่หายไปในคอมพิวเตอร์นี้ เปิดใช้งานแพ็คเกจ NuGet เพื่อดาวน์โหลด สำหรับข้อมูลเพิ่มเติมโปรดดูที่http://go.microsoft.com/fwlink/?LinkID=322105 ไฟล์ที่หายไปคือ {0}


1

นี่คือขั้นตอนที่ฉันใช้เพื่อแก้ไขปัญหา:

ในการเพิ่มแพ็คเกจ nuget ให้กับโซลูชันของคุณ:

  1. คลิกขวาที่โปรเจ็กต์ (ไม่ใช่โซลูชัน) ที่คุณต้องการอ้างอิงแพ็คเกจ nuget
  2. เลือก: จัดการแพ็คเกจ nuget
  3. บนหน้าต่างป๊อปอัพด้านซ้ายคุณมีสามตัวเลือก หากคุณเลือกออนไลน์> Microsoft &. NETคุณจะสามารถติดตั้งแพคเกจ Microsoft ASP.NET Web API 2.2 ปลาเก๋า (หรือแพ็คเกจใด ๆ ที่คุณต้องการ - ฉันเป็นแบบนี้)
  4. ตอนนี้คลิกขวาในการแก้ปัญหาของคุณ (ไม่ใช่โครงการ) และเลือก เปิดใช้งานแพ็กเกจ nuget เรียกคืน สิ่งนี้จะทำให้แพ็คเกจถูกดาวน์โหลดโดยอัตโนมัติเมื่อมีการรวบรวม

สิ่งที่ฉันต้องทำคือเปิดใช้งานแพคเกจ nugget สำหรับการแก้ปัญหา เห็นได้ชัดว่าทุกอย่างถูกตั้งค่าอย่างถูกต้องแล้ว
schmiddy98

1

สำหรับฉันมันใช้งานได้เมื่อฉันเพิ่งคัดลอกโฟลเดอร์. nuget จากโซลูชันที่ใช้งานไปยังโฟลเดอร์ที่มีอยู่และอ้างอิงถึงเนื้อหาของมัน!


1

สิ่งแรกที่ควรลองคือคลิกขวาที่โซลูชันและเลือก "เรียกคืนแพคเกจ Nuget"

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

สิ่งที่ใช้ได้คือการเปิด Package Manager Console และเรียกใช้:

Update-Package -reinstall -ProjectName MyProjectName

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


1

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

  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

หลังจากบรรทัดนั้นฉันต้องแสดงความคิดเห็นเหล่านี้:

  <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Use 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('..\..\..\..\..\packages\EntityFramework.6.4.0\build\EntityFramework.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\..\packages\EntityFramework.6.4.0\build\EntityFramework.props'))" />
    <Error Condition="!Exists('..\..\..\..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets'))" />
  </Target>
  <Import Project="..\..\..\..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets" Condition="Exists('..\..\..\..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets')" />

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

ป้อนคำอธิบายรูปภาพที่นี่ จากนั้นทุกอย่างทำงานได้ดีหลังจากสร้างโซลูชันขึ้นใหม่


0

ฉันมีปัญหาเดียวกันเมื่อฉันอ้างอิงไลบรารีคลาสลงในเว็บแอปพลิเคชัน MVC ของฉัน

ปัญหาคือหมายเลขรุ่นแพคเกจ nuget ไม่ตรงกันระหว่างสองโครงการ

เช่นห้องสมุดของฉันมี log4net 1.2.3 แต่ webapp ของฉันมี 1.2.6

แก้ไข: เพียงให้แน่ใจว่าโครงการทั้งสองมีหมายเลขรุ่นอ้างอิงเดียวกัน


0

การแก้ไข. sln และ. csproj นั้นไม่ใช่เรื่องง่ายหรือเป็นที่ต้องการเสมอไป เมื่อคุณได้รับรายการข้อผิดพลาดคุณสามารถดูว่าโครงการใดมีแพ็คเกจที่ขาดหายไป (เช่นกันโหนดการอ้างอิงมักจะระบุว่ามีชุดประกอบที่ขาดหายไปยกเว้นว่าแพ็คเกจเป็นซอร์สโค้ดทรัพยากรรูปภาพหรือแค่ชุดข้อความ)

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

ถ้าบอกว่าแพคเกจเป็น EntityFramework แล้วจากแกลเลอรี่ NuGet คุณจะได้รับรุ่นล่าสุดซึ่งในขณะที่เขียนความคิดเห็นนี้มันเป็น6.1.3

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

การมีสิ่งนี้กล่าวและให้อีกครั้ง EntityFramework เป็นแพ็คเกจที่ขาดหายไปคุณสามารถออกคำสั่งต่อไปนี้ใน Package-Manager Console:

PM> Install-Package EntityFramework -Version 6.0.1 

นี่จะติดตั้งเวอร์ชันที่ถูกต้องนั่นคือ6.0.1ซึ่งเป็นเวอร์ชันที่ระบุไว้ใน packages.config:

    <?xml version="1.0" encoding="utf-8"?>
    <packages>
      <package id="EntityFramework" version="6.0.1" targetFramework="net451" />
    </packages>

0

ฉันมีสิ่งนี้เมื่อไฟล์ csproj และ sln อยู่ในโฟลเดอร์เดียวกัน (โง่ฉันรู้) เมื่อฉันย้ายไปยังไฟล์ sln ไปยังโฟลเดอร์ด้านบนโฟลเดอร์ csproj ของฉันดังนั้น


-1

ฉันสร้างโฟลเดอร์ชื่อ '.nuget' ในโฟลเดอร์รากโซลูชันจากนั้นเพิ่มไฟล์ 'NuGet.Config' ในโฟลเดอร์นี้โดยมีเนื้อหาดังต่อไปนี้

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<solution>
 <add key="disableSourceControlIntegration" value="true" />
</solution>
</configuration>

จากนั้นสร้างไฟล์ '.nuGet.targets' ด้านล่าง $ (MSBuildProjectDirectory) .. \

    <!-- Enable the restore command to run before builds -->
    <RestorePackages Condition="  '$(RestorePackages)' == '' ">false</RestorePackages>

    <!-- Property that enables building a package from a project -->
    <BuildPackage Condition=" '$(BuildPackage)' == '' ">false</BuildPackage>

    <!-- Determines if package restore consent is required to restore packages -->
    <RequireRestoreConsent Condition=" '$(RequireRestoreConsent)' != 'false' ">true</RequireRestoreConsent>

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

<ItemGroup Condition=" '$(PackageSources)' == '' ">
    <!-- Package sources used to restore packages. By default will used the registered sources under %APPDATA%\NuGet\NuGet.Config -->
    <!--
        <PackageSource Include="https://nuget.org/api/v2/" />
        <PackageSource Include="https://my-nuget-source/nuget/" />
    -->
</ItemGroup>

<PropertyGroup Condition=" '$(OS)' == 'Windows_NT'">
    <!-- Windows specific commands -->
    <NuGetToolsPath>$([System.IO.Path]::Combine($(SolutionDir), ".nuget"))</NuGetToolsPath>
    <PackagesConfig>$([System.IO.Path]::Combine($(ProjectDir), "packages.config"))</PackagesConfig>
    <PackagesDir>$([System.IO.Path]::Combine($(SolutionDir), "packages"))</PackagesDir>
</PropertyGroup>

<PropertyGroup Condition=" '$(OS)' != 'Windows_NT'">
    <!-- We need to launch nuget.exe with the mono command if we're not on windows -->
    <NuGetToolsPath>$(SolutionDir).nuget</NuGetToolsPath>
    <PackagesConfig>packages.config</PackagesConfig>
    <PackagesDir>$(SolutionDir)packages</PackagesDir>
</PropertyGroup>

<PropertyGroup>
    <!-- NuGet command -->
    <NuGetExePath Condition=" '$(NuGetExePath)' == '' ">$(NuGetToolsPath)\nuget.exe</NuGetExePath>
    <PackageSources Condition=" $(PackageSources) == '' ">@(PackageSource)</PackageSources>

    <NuGetCommand Condition=" '$(OS)' == 'Windows_NT'">"$(NuGetExePath)"</NuGetCommand>
    <NuGetCommand Condition=" '$(OS)' != 'Windows_NT' ">mono --runtime=v4.0.30319 $(NuGetExePath)</NuGetCommand>

    <PackageOutputDir Condition="$(PackageOutputDir) == ''">$(TargetDir.Trim('\\'))</PackageOutputDir>

    <RequireConsentSwitch Condition=" $(RequireRestoreConsent) == 'true' ">-RequireConsent</RequireConsentSwitch>
    <!-- Commands -->
    <RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)"  $(RequireConsentSwitch) -o "$(PackagesDir)"</RestoreCommand>
    <BuildCommand>$(NuGetCommand) pack "$(ProjectPath)" -p Configuration=$(Configuration) -o "$(PackageOutputDir)" -symbols</BuildCommand>

    <!-- Make the build depend on restore packages -->
    <BuildDependsOn Condition="$(RestorePackages) == 'true'">
        RestorePackages;
        $(BuildDependsOn);
    </BuildDependsOn>

    <!-- Make the build depend on restore packages -->
    <BuildDependsOn Condition="$(BuildPackage) == 'true'">
        $(BuildDependsOn);
        BuildPackage;
    </BuildDependsOn>
</PropertyGroup>

<Target Name="CheckPrerequisites">
    <!-- Raise an error if we're unable to locate nuget.exe  -->
    <Error Condition="'$(DownloadNuGetExe)' != 'true' AND !Exists('$(NuGetExePath)')" Text="Unable to locate '$(NuGetExePath)'" />
    <SetEnvironmentVariable EnvKey="VisualStudioVersion" EnvValue="$(VisualStudioVersion)" Condition=" '$(VisualStudioVersion)' != '' AND '$(OS)' == 'Windows_NT' " />
    <DownloadNuGet OutputFilename="$(NuGetExePath)" Condition=" '$(DownloadNuGetExe)' == 'true' AND !Exists('$(NuGetExePath)')"  />
</Target>

<Target Name="RestorePackages" DependsOnTargets="CheckPrerequisites">
    <Exec Command="$(RestoreCommand)"
          Condition="'$(OS)' != 'Windows_NT' And Exists('$(PackagesConfig)')" />

    <Exec Command="$(RestoreCommand)"
          LogStandardErrorAsError="true"
          Condition="'$(OS)' == 'Windows_NT' And Exists('$(PackagesConfig)')" />
</Target>

<Target Name="BuildPackage" DependsOnTargets="CheckPrerequisites">
    <Exec Command="$(BuildCommand)" 
          Condition=" '$(OS)' != 'Windows_NT' " />

    <Exec Command="$(BuildCommand)"
          LogStandardErrorAsError="true"
          Condition=" '$(OS)' == 'Windows_NT' " />
</Target>

<UsingTask TaskName="DownloadNuGet" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
    <ParameterGroup>
        <OutputFilename ParameterType="System.String" Required="true" />
    </ParameterGroup>
    <Task>
        <Reference Include="System.Core" />
        <Using Namespace="System" />
        <Using Namespace="System.IO" />
        <Using Namespace="System.Net" />
        <Using Namespace="Microsoft.Build.Framework" />
        <Using Namespace="Microsoft.Build.Utilities" />
        <Code Type="Fragment" Language="cs">
            <![CDATA[
            try {
                OutputFilename = Path.GetFullPath(OutputFilename);

                Log.LogMessage("Downloading latest version of NuGet.exe...");
                WebClient webClient = new WebClient();
                webClient.DownloadFile("https://nuget.org/nuget.exe", OutputFilename);

                return true;
            }
            catch (Exception ex) {
                Log.LogErrorFromException(ex);
                return false;
            }
        ]]>
        </Code>
    </Task>
</UsingTask>

 <UsingTask TaskName="SetEnvironmentVariable" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
    <ParameterGroup>
        <EnvKey ParameterType="System.String" Required="true" />
        <EnvValue ParameterType="System.String" Required="true" />
    </ParameterGroup>
    <Task>
        <Using Namespace="System" />
        <Code Type="Fragment" Language="cs">
            <![CDATA[
            try {
                Environment.SetEnvironmentVariable(EnvKey, EnvValue, System.EnvironmentVariableTarget.Process);
            }
            catch  {
            }
        ]]>
        </Code>
    </Task>
</UsingTask>

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