项目PROJECT的NuGet包还原失败:无法找到'Microsoft.Net.Compilers' 2.0.0版本的包。

31

我使用Visual Studio 2015的GitHub扩展将项目克隆到新电脑上。我尝试还原包但出现错误,显示如下:

NuGet Package restore failed for project PROJECT: Unable to find version 2.0.0 of package 'Microsoft.Net.Compilers'

我查看了一些关于类似问题的其他问题,但那些解决方案都还没有对我起作用。

我尝试删除packages文件夹,再次打开Visual Studios并重新构建,但这并没有解决问题。

我尝试在包管理器控制台中手动安装Microsoft.Net.Compilers。

 PM> Install-Package Microsoft.Net.Compilers

我尝试从csproj文件中删除这段代码(这似乎对某些人有效):

我尝试从csproj文件中删除这一部分代码(这看起来对有些人是有效的):

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

我尝试使用以下命令重新安装所有软件包:

Update-Package –reinstall

到目前为止,我还没有解决这个问题的运气。任何帮助都将不胜感激。

编辑:

I tried the response below and received this error:

Install-Package : Some NuGet packages are missing from the solution. The packages need to be restored in order to build the dependency graph. Restore the packages before performing any operations.
At line:1 char:16
+ Install-Package <<<<  -Id Microsoft.Net.Compilers -Version 1.3.2 -Source nuget.org
    + CategoryInfo          : InvalidOperation: (:) [Install-Package], InvalidOperationException
    + FullyQualifiedErrorId : NuGetMissingPackages,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand

这也促使我恢复软件包。当我点击恢复时,我收到了和平常一样的错误提示。

9个回答

24
根据您的错误信息,似乎您正在寻找一个不存在的版本,并且无法确定您选择了哪个软件包源。我觉得您可能在寻找版本2.0.0,但在 nuget.org 存储库中不可用。最新版本是 2.0.0-rc,这是预发布候选版。如果您想获取最新版本,请尝试此命令。
Install-Package -Id Microsoft.Net.Compilers -Version 2.0.0-rc -Source nuget.org
如果你想要获取最新的稳定版本(1.3.2),请尝试运行以下命令。

如果你想要获取最新的稳定版本(1.3.2),请尝试运行以下命令。

Install-Package -Id Microsoft.Net.Compilers -Version 1.3.2 -Source nuget.org

更新 如果软件包仍然无法安装,则可能是packages.config、packages/文件夹和.csproj文件之间的软件包不同步。

请按照以下步骤执行手动清理:

  1. 关闭Visual Studio。
  2. 在记事本或其他文本编辑器中打开.csproj文件,并手动删除与Microsoft.Net.Compilers相关的所有条目。
  3. 在记事本或其他文本编辑器中打开packages.config文件,并删除Microsoft.Net.Compilers软件包的条目。
  4. 在Windows资源管理器中转到packages/文件夹并删除Microsoft.Net.Compilers文件夹。
  5. 现在启动Visual Studio并打开解决方案。
  6. 现在尝试重新安装该软件包。

作为第2步的一部分,您可能需要从.csproj中删除的某些条目如下:

<Import Project="..\packages\Microsoft.Net.Compilers.1.3.2\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.3.2\build\Microsoft.Net.Compilers.props')" />

<NuGetPackageImportStamp></NuGetPackageImportStamp>

<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\Microsoft.Net.Compilers.1.3.2\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Net.Compilers.1.3.2\build\Microsoft.Net.Compilers.props'))" />
</Target>

感谢您的回复。我尝试了这两种方法,但每次都出现以下错误:Install-Package: 解决方案中缺少一些NuGet包。需要还原这些包以构建依赖关系图。在执行任何操作之前,请先还原这些包。 在第1行第16个字符处:
  • Install-Package <<<< -Id Microsoft.Net.Compilers -Version 1.3.2 -Source nuget.org
    • CategoryInfo : InvalidOperation: (:) [Install-Package], InvalidOperationException
    • FullyQualifiedErrorId : NuGetMissingPackages,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand
- Dylan Caudill
请查看我的更新。看起来你的Microsoft.Net.Compilers包在packages.config、packages/文件夹和.csproj文件之间可能不同步。在再次尝试安装之前,您必须手动清理它。 - Vinod

23
我在安装Visual Studio 2017后遇到了类似的错误,并且不得不采取以下步骤才能成功自动恢复缺失的NuGet包。在VS中,转到“工具>选项>NuGet程序包管理器>程序包源”,确保适当的程序包源显示并已选中。
请参见下面的屏幕截图。在顶部添加nuget.org程序包源告诉VS如果在本地机器上找不到适当版本,则从NuGet在线下载这些包。
更新(8/2023):根据下面的评论,现在NuGet的适当程序包源URL是https://api.nuget.org/v3/index.json

enter image description here


1
仅供他人参考:我的源是Microsoft Visual Studio离线包的来源,而路径“C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\”中没有列出项目中的NuGet包。必须添加一个新的包源路径 - “https://api.nuget.org/v3-index/index.json”,然后才能恢复Nuget包或重新构建。 - Shiva Naru
1
是的,和@ShivaNaru一样,在我的新机器上只有本地路径的VS安装。真不可思议,在启用NuGet之前需要找到这个设置。https://learn.microsoft.com/en-us/nuget/consume-packages/install-use-packages-visual-studio#package-sources - Mike Fuchs

3

我在 VS 2019 上也遇到了类似的问题,以下方法对我有效。打开“工具”>“选项”>“NuGet 包管理器”>“常规”,清除所有 NuGet 缓存。

参考下面的图片: 参考下面的图片:


2

这可能有点晚,但仍然可以帮助某些人。当您尝试检入代码并出现此类错误时,意味着您已安装该软件包并将其卸载,因此您只需要在包含更改中找到软件包,在我的示例中我使用的是TFS,并排除或撤消即可解决问题。


2
我将我的项目移动到与NuGet包最初存储在项目中的位置有关的位置,最终发现这会导致一个问题,而这个问题可能并不是立即显而易见的。在进行NuGet包还原后,我发现我的.csproj文件的EnsureNuGetPackageBuildImports目标中添加了第二个条目,反映了新位置的相对路径。
现在,该目标看起来如下:
  <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\Microsoft.Net.Compilers.2.10.0\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.Net.Compilers.2.10.0\build\Microsoft.Net.Compilers.props'))" />
    <Error Condition="!Exists('..\..\packages\Microsoft.Net.Compilers.2.10.0\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.Net.Compilers.2.10.0\build\Microsoft.Net.Compilers.props'))" />
  </Target>

请注意这两个条目,它们指向不同的 packages 路径。这意味着其中一个(第一个,在我移动项目之前)将始终失败。
解决方法很简单。我只需从 Target 中删除第一个 Error 节点即可。
我还发现在根 Project 节点的初始 Import 节点中存在类似的问题。
我原来写的是:
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="..\..\packages\Microsoft.Net.Compilers.2.10.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\..\packages\Microsoft.Net.Compilers.2.10.0\build\Microsoft.Net.Compilers.props')" />
  <Import Project="..\packages\Microsoft.Net.Compilers.2.10.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.2.10.0\build\Microsoft.Net.Compilers.props')" />

修复方法就是删除错误的Import节点。

再次强调,修复方法就是删除错误的Import节点。

1
这种错误也可能是使用旧版的nuget.exe导致的。例如,如果您下载TFS 2015的agent.zip,在其中包含版本3.2.1:

\Agent\Worker\Tools\nuget.exe

那个版本可能会出现错误,提示“无法找到名称为'NUnit'、版本为'3.7.1'的包。”该错误通常在使用VS 2015创建的解决方案中出现。(但是,NUnit3TestAdapter.3.9.0则不会出现此错误)更新nuget.exe至5.2可解决此问题。

0

我知道原因了,它在C:\Program Files (x86)\Microsoft SDKs\NuGetPackages文件夹中。那里有你之前安装的包。


0

在导航栏中进入工具,然后选择“工具和功能”,检查您的框架是否已下载。 输入图像描述


请在您的答案中修正拼写错误。 - andrzejwp
虽然此链接可能回答了问题,但最好将答案的重要部分包含在这里,并提供参考链接。如果链接页面更改,则仅链接的答案可能会失效。-【来自审阅】 - Andrew Halil

0
这是我的错误信息:“该项目引用了在此计算机上缺失的NuGet包。请使用NuGet Package Restore下载它们。”

enter image description here

这是我的解决方案:我必须确保在“管理Nuget包”窗口中选中了我的软件包源。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接