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

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

我使用 Visual Studio 2015 的 GitHub 扩展将我的项目克隆到新计算机上。我尝试恢复包,但收到一条错误消息:

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

我已经研究了一些关于类似问题的其他问题,但是 none 这些解决方案中的一些对我有用。

我尝试删除 packages 文件夹,再次打开 Visual Studios 然后重建。那并没有解决它。

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

 PM> Install-Package Microsoft.Net.Compilers

我尝试从 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

还提示我恢复包。当我点击恢复时,我得到了和往常一样的错误。

根据您的错误消息,您似乎正在寻找一个不再存在的版本,并且无法判断您选择了哪个包源。我觉得您正在寻找 nuget.org 存储库中不可用的版本 2.0.0。最新的是 2.0.0-rc,它是预发布候选版本。

如果您想获取最新版本,请尝试此命令

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

如果你想要最新的稳定版本(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. 相关的所有条目
  4. 在记事本或某些文本编辑器中打开 packages.config,然后删除 Microsoft.Net.Compilers 包的条目
  5. 转到 windows 资源管理器中的 packages/ 文件夹并删除 Microsoft.Net.Compilers 文件夹
  6. 现在启动 visual studio 并打开解决方案。
  7. 现在再次尝试安装包。

作为第 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>

我知道为什么,它在 C:\Program Files (x86)\Microsoft SDKs\NuGetPackages 文件夹中。有您之前安装过的软件包。

这可能有点晚了,但它仍然会对某些人有所帮助。当您尝试签入您的代码并遇到此类错误时,这意味着您已经安装并再次卸载了该包,因此您只需要在包含的更改下找到该包,在我的示例中,我使用的是 TFS,并排除或撤消。这将解决问题。

全新安装 Visual Studio 2017 后,我遇到了类似的错误,必须执行以下操作才能成功自动恢复丢失的 NuGet 包。在 VS 中,转到 "Tools > Options > NuGet Package Manager > Package Sources",并确保显示并选中适当的包源。

见下文。在顶部添加 nuget.org 包源告诉 VS 如果在本地计算机上找不到合适的版本,请联机从 NuGet 下载包。

我根据 NuGet 包最初存储在我的项目中的位置移动了我的项目,我最终发现这会导致 .csproj 文件出现问题,该问题可能不会立即显现出来。

在移动之后并执行 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 节点。

使用旧版本的 nuget.exe 也会发生这种错误。比如你下载TFS 2015的agent.zip,里面有3.2.1版本:

\Agent\Worker\Tools\nuget.exe

使用 VS 2015 创建的解决方案,该版本可能会出现错误 "Unable to find version '3.7.1' of package 'NUnit'."。(不过,NUnit3TestAdapter.3.9.0 不会出现错误)

将 nuget.exe 更新到 5.2 解决了问题。

这是我的错误:“项目引用了这台计算机上丢失的 NuGet 包。使用 NuGet 包还原来下载它们。”

这是我的解决方案:我必须确保在“管理 Nuget 包”中检查了我的包源 window。

我在 VS 2019 上也遇到了类似的问题,这个对我有用,只需转到“工具”>“选项”>“NuGet 包管理器”>“常规”并清除所有 NuGet 缓存。

见下图

转到导航栏中的工具以及工具和功能,检查您的框架是否已下载 enter image description here