Dự án này tham khảo (các) gói NuGet bị thiếu trên máy tính này


313

Tôi có một ứng dụng ASP.NET MVC5 đã hoạt động vào ngày hôm qua và bây giờ tôi gặp lỗi này khi tôi cố gắng xây dựng:

Dự án này tham khảo (các) gói NuGet bị thiếu trên máy tính này.

Tôi có hai tùy chọn được kiểm tra cho phép nuget tự động tải xuống và cài đặt các gói bị thiếu được kiểm tra / bật ON. Tôi cũng đã thử xóa tất cả các tệp trong thư mục gói và sau đó đã tải lại chúng. Ngoài ra khi tôi mở nuget và tìm kiếm các bản cập nhật thì nó nói không có cái nào cần phải cài đặt. Tôi không thể tìm ra những gì khác phải làm để vượt ra ngoài vấn đề gây phiền nhiễu đáng kinh ngạc này.


1
Tôi cũng đã kích hoạt khôi phục nuget bằng cách nhấp chuột phải vào dự án và chọn tùy chọn đó. Sau đó, nó đã thêm một thư mục nuget và ba mục trong thư mục đó và không có gì để giải quyết vấn đề. Tôi đã thử xây dựng lại và vẫn gặp lỗi tương tự ở trên.
Austin Harris

Giải pháp của bạn có bao gồm thư mục .nuget và bạn đã cập nhật NuGet lên phiên bản mới nhất chưa? Xem tại đây: stackoverflow.com/questions/18833649/ từ
David Brabant

Có, đã thử điều đó và nó không giải quyết được vấn đề thông báo lỗi xây dựng của tôi.
Austin Harris

Một lý do khác cho lỗi này là một The operation has timed out.lỗi. trong quá trình xây dựng. Bạn cần kiểm tra nhật ký xây dựng của mình hoặc tab Chẩn đoán trong màn hình thông tin Lỗi xây dựng trực tuyến của Visual Studio.
Joshua Drake

Không có giải pháp nào phù hợp với tôi. Tôi đang tải xuống từ một repo và các gói khôi phục trong cấu trúc tệp chính xác cho dự án đầu tiên, dự án thứ hai không thể tìm thấy chúng. Kiểm tra .csproj cho thấy đường dẫn tương đối chính xác đang được sử dụng nên tôi không thể giải quyết vấn đề này. github.com/DanJ210/ProgrammersTest
Daniel Jackson

Câu trả lời:


463

Trong trường hợp của tôi, tôi đã phải xóa các mục sau khỏi tệp .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>

Trong thực tế, trong đoạn trích này, bạn có thể thấy thông báo lỗi đến từ đâu.

Tôi đã chuyển đổi từ MSBuild-Integrated Gói Restore để gói tự động Restore ( http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore )


12
Điều này làm việc cho tôi, nhưng tôi chỉ cần xóa phần tử <Target> </ Target>. VS [2013] dường như cũng khôi phục nó nếu tôi cũng loại bỏ phần tử <Nhập>.
Robert Taylor

3
Điều này là nghiêm trọng không thể tin được. Tại sao Microsoft làm mọi thứ trở nên khó khăn như vậy?
dimiguel 4/2/2015

11
Nếu điều này có thể được gỡ bỏ, tại sao nó lại ở đó ngay từ đầu?
OK999 17/8/2016

1
OK9999, tại một thời điểm, bạn phải kích hoạt nó từ phiên bản Visual Studio trước đó, bằng cách nhấp chuột phải vào giải pháp và chọn "Bật khôi phục gói NuGet" theo cách cũ. Chúng ta không cần điều đó nữa
Loren Paulsen

3
Tôi thích các giải pháp chỉ liên quan đến việc xóa mọi thứ.
Todd Menier

86

Một giải pháp sẽ là xóa khỏi tệp .csproj như sau:

<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>

Làm sao?

  1. Nhấp chuột phải vào dự án. Dự án dỡ hàng.
  2. Nhấp chuột phải vào dự án. Chỉnh sửa csproj.
  3. Loại bỏ phần khỏi tập tin. Tiết kiệm.
  4. Nhấp chuột phải vào dự án. Tải lại dự án.

Khi bạn di chuyển một dự án từ nơi này sang nơi khác, điều này hoạt động rất tốt.
Dean Seo

4
@IvanSantiago Nó đã được TRẢ LỜI ở trên với cùng một giải pháp! .. Bầu chọn XUỐNG! ..
Jack

2
@ClintEastwood Câu trả lời của tôi đã giải thích CÁCH LÀM . Đó là sự khác biệt. Nếu người dùng đang tìm kiếm CÁCH ĐỂ câu trả lời của tôi có nó, ngược lại với câu trả lời ở trên.
Ivan Santiago

2
@IvanSantiago Bạn có thể có: thêm nó dưới dạng nhận xét hoặc chỉnh sửa câu trả lời ban đầu bằng Cách thực hiện.
Colin

50

Trong trường hợp của tôi, nó đã xảy ra sau khi tôi di chuyển thư mục giải pháp của mình từ vị trí này sang vị trí khác, tổ chức lại nó một chút và trong quá trình cấu trúc thư mục tương đối của nó đã thay đổi.

Vì vậy, tôi đã phải chỉnh sửa tất cả các mục tương tự như mục sau trong .csprojtệp của mình từ

  <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')" />

đến

  <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')" />

(Lưu ý thay đổi từ ..\packages\sang packages\. Nó có thể là một cấu trúc tương đối khác trong trường hợp của bạn, nhưng bạn có ý tưởng.)


3
Vấn đề tương tự .... Tôi đã chuyển tệp .csproj lên một cấp trong cấu trúc thư mục và phải thay đổi từ ".. \ .. \ gói \ ..." thành ".. \ gói \ ...".
tmgirvin

2
Tôi đã có một vấn đề tương tự, nhưng thực sự kỳ lạ. Tôi đã sử dụng nó trong một mô-đun phụ, vì vậy nó rất ổn trong giải pháp đó, nhưng khi tôi tham chiếu giải pháp đó từ một giải pháp khác, các gói ở một nơi khác. Tôi đã thay đổi .. \ gói thành gói $ (SolutionDir) trong toàn bộ .csproj và đã sửa nó.
JoeNCA

2
Nếu bạn không muốn làm quen với tệp .csproj theo cách thủ công tôi đã thấy rằng việc ghi chú tất cả các gói nuget bạn đã cài đặt cho dự án, xóa chúng và cài đặt lại chúng đã giải quyết vấn đề này cho tôi. Tôi đã cố gắng loại bỏ một dự án khỏi một giải pháp để đưa vào kho git của chính nó khi tôi gặp phải vấn đề này.
WiteCastle

điều này có nghĩa là .csproj của bạn ở cùng cấp độ với tệp .sln của bạn phải không?
Simon_Weaver

@Simon_Weaver vị trí của .csprojngười thân của bạn với bạn .slnkhông quan trọng trong bối cảnh này. Điều quan trọng là liệu bất cứ thứ gì được tham chiếu trong của bạn .csprojđã được chuyển đi nơi khác. Nếu vậy, thì bạn cần phải sửa nó. Nếu bạn đã di chuyển '.csproj' của mình với mọi thứ mà nó tham chiếu nguyên vẹn, nhưng vẫn giữ nguyên vị trí của .slnnó, thì bạn phải sửa .slntệp sang vị trí mới của .csproj-es, nhưng sẽ không cần chỉnh sửa .csprojtệp.
Nikita G.

22

Tôi dễ dàng giải quyết vấn đề này bằng cách nhấp chuột phải vào giải pháp của mình và sau đó nhấp vào tùy chọn Bật khôi phục gói NuGet

(PS: Đảm bảo rằng bạn đã cài đặt Nuget từ các công cụ -> Tiện ích mở rộng và cập nhật -> Trình quản lý gói Nuget cho Visual Studio 2013. Nếu không cài đặt phần mở rộng này trước)

Hy vọng nó giúp.


7
Đây là cách cũ để khôi phục các gói nuget và nên tránh.
Người đàn ông Muffin

2
@TheMuffinMan: Bạn có thể vui lòng làm rõ cách thức mới là gì và tại sao nên tránh cách này (xem xét rằng đầu ra lỗi VS 2013 cho bạn biết chính xác điều đó)?
CantrianBear

2
@CantrianBear Điều hướng đến trang này docs.nuget.org/consume/package-restore và tìm phần được gọi MSBuild-Integrated Package Restore. Đó là cách cũ và nó liệt kê một số lý do tại sao bạn nên sử dụng cách mới.
Người đàn ông Muffin

Xem blog của David Ebbo trên blog này.davidebbo.com / 2014/01 / Bây giờ ... "NuGet hiện luôn khôi phục các gói trước khi xây dựng trong VS."
timB33

17

Trong trường hợp của tôi, nó phải làm với phiên bản Microsoft.Build.Bcl. Phiên bản gói nuget của tôi là 1.0,21, nhưng các tệp dự án của tôi vẫn đang trỏ đến phiên bản 1.0,14

Vì vậy, tôi đã thay đổi các tệp .csproj của mình từ:

  <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>

đến:

 <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" />

Và bản dựng đã hoạt động trở lại.


11

Nếu bạn đang sử dụng TFS

Xóa NuGet.exeNuGet.targetstệp khỏi .nugetthư mục của giải pháp . Hãy chắc chắn rằng các tệp cũng được loại bỏ khỏi không gian làm việc của giải pháp. Giữ lạiNuGet.Config tệp để tiếp tục bỏ qua việc thêm các gói vào kiểm soát nguồn.

Chỉnh sửa từng tệp dự án (ví dụ: .csproj, .vbproj) trong giải pháp và xóa mọi tham chiếu đến NuGet.targetstệp. Mở (các) tệp dự án trong trình chỉnh sửa bạn chọn và xóa các cài đặt sau:

<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>

Nếu bạn không sử dụng TFS

Gỡ bỏ .nuget thư mục khỏi giải pháp của bạn. Hãy chắc chắn rằng chính thư mục cũng bị xóa khỏi không gian làm việc của giải pháp.

Chỉnh sửa từng tệp dự án (ví dụ: .csproj, .vbproj) trong giải pháp và xóa mọi tham chiếu đến NuGet.targetstệp. Mở (các) tệp dự án trong trình chỉnh sửa bạn chọn và xóa các cài đặt sau:

<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>

Tham khảo: Di chuyển các giải pháp tích hợp MSBuild để sử dụng Khôi phục gói tự động


8

Có thể các gói đã được khôi phục vào thư mục sai? Kiểm tra xem các đường dẫn trong tệp csproj có đúng không.

Nếu chúng khác nhau thì có thể là do các gói hiện đang được khôi phục đến một vị trí khác. Điều này có thể do tệp NuGet.Config bị kiểm tra khi chỉ định một nút như thế này:

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

Các gói đang được khôi phục, bởi các dự án vẫn đang nhìn vào vị trí cũ.


1
Tôi tin rằng đó có thể là sự cố đường dẫn vì tôi đã di chuyển vị trí của các tệp nhưng tôi không thấy nơi nào có đường dẫn được mã hóa cứng ở bất cứ đâu. Tôi đã xem tệp proj và tất cả các tệp gói dường như tương đối như thế này: <Reference Bao gồm = "Antlr3.R.78, Version = 3.5.0.2, Culture = trung tính, PublicKeyToken = eb42632606e9261f, bộ xử lýArch architecture = MSIL"> <Cụ thể </ Cụ thể> <HintPath> .. \ gói \ Antlr.3.5.0.2 \ lib \ Antlr3.R.78.dll </ HintPath> </ Reference>
Austin Harris

việc thêm này vào web.config không giúp được gì: <add key = "repositoryPath" value = ".. \ .. \ Gói" />
Austin Harris

Bạn không muốn thêm nó vào web.config. Tôi đã tham khảo tệp NuGet.config và bạn muốn kiểm tra đường dẫn tương đối. Các gói của bạn liên quan đến các tệp csproj ở đâu? Họ có trong .. \ gói không? Nghe có vẻ như các gói đang được khôi phục chính xác, nhưng các dự án của bạn đang tìm sai chỗ.
tin

6

Tôi gặp vấn đề tương tự. Trong trường hợp của tôi, cài đặt gói Microsoft.Bcl.Build đã khắc phục sự cố.


Điều này cũng có hiệu quả với tôi - nhưng tôi không biết liệu việc phải làm là cài đặt gói đó (có tác dụng tương tự như câu trả lời thay đổi phiên bản của henkie14 bên dưới hay chỉ xóa tất cả các Mục tiêu đó - chúng có thực sự hữu ích không?
Gaz

Trong 1.0.21phiên bản không có tệp nào trong gói, cài đặt 1.0.14phiên bản đã sửa lỗi này.
FLCL

4

Đã xóa các dòng dưới đây trong tệp .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

Một giải pháp sẽ là xóa khỏi tệp .csproj như sau:

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

Dự án này tham khảo (các) gói NuGet bị thiếu trên máy tính này. Kích hoạt Khôi phục Gói NuGet để tải xuống. Để biết thêm thông tin, hãy xem http://go.microsoft.com/fwlink/?LinkID=322105 . Tệp bị thiếu là {0}.


1

Đây là các bước tôi đã sử dụng để khắc phục sự cố:

Để thêm các gói nuget vào giải pháp của bạn:

  1. Nhấp chuột phải vào dự án (không phải giải pháp) mà bạn muốn tham khảo các gói nuget.
  2. Chọn: Quản lý gói nuget
  3. Trên cửa sổ bật lên, bên trái bạn có ba lựa chọn. Nếu bạn chọn Trực tuyến> Microsoft & .NET , bạn sẽ có thể cài đặt nhóm cá nhân gói Microsoft ASP.NET Web API 2.2 (hoặc bất kỳ gói nào bạn cần - của tôi là cái này).
  4. Bây giờ, nhấp chuột phải vào giải pháp của bạn (không phải dự án) và chọn Bật khôi phục gói nuget . Điều này sẽ khiến các gói được tải xuống tự động khi biên dịch.

Tất cả tôi phải làm là cho phép khôi phục gói nugget cho giải pháp. Rõ ràng mọi thứ khác đã được thiết lập chính xác.
schmiddy98 23/2/2015

1

Đối với tôi nó hoạt động khi tôi vừa sao chép một thư mục .nuget từ một giải pháp đang hoạt động sang một giải pháp hiện có và tham chiếu nội dung của nó!


1

Điều đầu tiên cần thử là nhấp chuột phải vào giải pháp và chọn "Khôi phục gói Nuget".

Trong trường hợp của tôi không hoạt động, vì vậy tôi đã làm theo một số khuyến nghị về việc xóa "Nhập" và "Nhắm mục tiêu" vào tệp dự án, điều này đã làm việc cho 2 trong số 3 dự án của tôi, nhưng đã gặp lỗi khác nhau ở lần cuối.

Điều làm việc là mở Bảng điều khiển quản lý gói và chạy:

Update-Package -reinstall -ProjectName MyProjectName

Phải mất một thời gian nhưng vì nó cài đặt lại tất cả các gói nên dự án của bạn sẽ biên dịch mà không gặp vấn đề gì


1

Tôi có cùng một vấn đề. Tôi đã gặp nó khi tôi sao chép một dự án hiện có và chuyển nó vào thư mục của thư mục giải pháp của tôi và thêm nó dưới dạng dự án hiện có vào giải pháp trống của tôi. Vì vậy, tôi phải chỉnh sửa tệp csproj của mình và tìm kiếm dòng mã cụ thể này, hầu hết thời gian, điều này có thể được tìm thấy trên các dòng cuối cùng:

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

Sau dòng đó, tôi phải bình luận những điều này:

  <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')" />

Giải pháp của bạn sẽ nhắc rằng có một thay đổi trong dự án của bạn, chỉ cần chọn Tải lại tất cả:

nhập mô tả hình ảnh ở đây Sau đó, mọi thứ hoạt động tốt sau khi xây dựng lại giải pháp của tôi.


0

Tôi gặp vấn đề tương tự khi tôi tham chiếu thư viện Class vào ứng dụng web MVC của mình,

vấn đề là số phiên bản gói nuget không khớp giữa hai dự án.

ví dụ: thư viện lớp của tôi có log4net 1.2.3 nhưng ứng dụng web của tôi có 1.2.6

sửa chữa: chỉ cần đảm bảo rằng cả hai dự án có cùng số phiên bản được tham chiếu.


0

Chỉnh sửa .sln và .csproj không phải lúc nào cũng dễ dàng hoặc mong muốn. Khi bạn nhận được danh sách lỗi, bạn có thể thấy các dự án nào thiếu các gói (đồng thời, nút Tham chiếu thường chỉ ra rằng có các cụm bị thiếu trừ khi các gói là mã nguồn, tài nguyên, hình ảnh hoặc chỉ là các gói dựa trên văn bản).

Loại bỏ và sau đó thêm các gói không phải là một ý tưởng tốt trừ khi bạn sử dụng phiên bản mới nhất của gói. Nếu không hãy chuẩn bị cho những bất ngờ, không phải lúc nào cũng dễ chịu.

Nếu, giả sử, gói là EntityFramework thì từ thư viện NuGet bạn sẽ có phiên bản mới nhất mà tại thời điểm viết nhận xét này, nó là 6.1.3 .

Vì vậy, có lẽ cách an toàn nhất để xử lý tình huống là khôi phục từng gói bị thiếu. Vâng, một bài tập hơi đau nhưng đuổi theo các lỗi tinh vi do phiên bản gói khác nhau có thể khó chịu hơn nhiều.

Nói điều này và để lại EntityFramework là gói bị thiếu, bạn có thể đưa ra lệnh sau trong Bảng điều khiển Trình quản lý gói:

PM> Install-Package EntityFramework -Version 6.0.1 

Điều này sẽ cài đặt phiên bản chính xác, đó là 6.0.1 , đó là phiên bản được chỉ định trong gói.config:

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

0

Tôi đã có điều này khi các tệp csproj và sln nằm trong cùng một thư mục (ngu ngốc, tôi biết). Khi tôi chuyển đến tập tin sln vào thư mục phía trên thư mục csproj


-1

Tôi đã tạo một thư mục có tên '.nuget' trong thư mục gốc của giải pháp Sau đó thêm tệp 'NuGet.Config' trong thư mục này với nội dung sau

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

Sau đó, tạo tệp '.nuGet.target' dưới $ (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>

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.