构建错误,此项目引用了NuGet。

60

当我尝试构建我的解决方案时,出现以下错误消息:

严重性 代码 描述 项目 文件 行 抑制状态 错误 此项目引用缺失于计算机上的NuGet包。使用NuGet包还原来下载它们。有关详细信息,请参见http://go.microsoft.com/fwlink/?LinkID=322105。丢失的文件是..\packages\Microsoft.Net.Compilers.1.1.1\build\Microsoft.Net.Compilers.props。MusicKarma C:\Users\Bryan\Documents\Visual Studio 2015\Projects\MusicKarma\MusicKarma.csproj 268

当我查看我的packages文件夹时,我可以找到一个名为Microsoft.Net.Compilers.props的文件。

我已经尝试使用NuGet Restore,但它仍然说我已经有了所有的包。

当我将此项目从TFS移到我的某台计算机上时就会出现此问题。

9个回答

55

以下是对我和其他人都有效的快速解决方案:

如果您使用的是VS 2015+,只需从项目的.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>

在VS 2015+解决方案资源管理器中:

  1. 右键单击项目名称 -> 卸载项目
  2. 右键单击项目名称 -> 编辑 .csproj 文件
  3. 从文件中删除上述指定的行并保存
  4. 右键单击项目名称 -> 重新加载项目

1
我看到下面另一个答案只删除了<target>部分,因为我没有<import>标签部分,这对我很有用,但是这个答案提供了卸载和重新加载的说明,这帮了我很多。感谢分享@Natasha - DG7
1
我使用这个编译成功。 - HaibaraAi
从.csproj中删除上述行会禁用还原Nuget包的功能。 - Jim Speaker
1
是的,我在VS 2017上遇到了类似的问题。 我删除了所有带有Microsoft.Net.Compilers.1.0.0值的导入和错误行。 - Roberto Gata

43

在创建文件夹(而不是在我的解决方案中)并移动一些项目时,我遇到了这个问题。

结果发现包路径是相对于 csproj 文件的。因此,我必须更改我的引用的 "HintPath":

<Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
    <HintPath>..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll</HintPath>
    <Private>True</Private>
</Reference>
<Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
    <HintPath>..\..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll</HintPath>
    <Private>True</Private>
</Reference>

注意在 'HintPath' 中有双 "..\"。

我还必须更改我的错误条件,例如我不得不更改:

<Error Condition="!Exists('..\packages\Microsoft.Net.Compilers.1.1.1\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Net.Compilers.1.1.1\build\Microsoft.Net.Compilers.props'))" />

收件人:

<Error Condition="!Exists('..\..\packages\Microsoft.Net.Compilers.1.1.1\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.Net.Compilers.1.1.1\build\Microsoft.Net.Compilers.props'))" />

再次注意双重 "..\"。


2
感谢您提供无价的答案,您救了我的一天 :) - katmanco
谢谢,你帮了我很多忙。在处理软件包文件夹路径时要小心。 - Oleksandr Skrypnyk
在我的情况下,我将“..\packages”更改为“.\packages”,然后它就可以正常工作了。 - Mawardy

34

首先,我会检查您的MusicKarma项目的packages.config文件中是否有Microsoft.Net.Compilers。如果没有,那么您可以从MusicKarma.csproj中删除与该NuGet包相关的所有内容。

如果您正在使用Microsoft.Net.Compilers NuGet包,则我的猜测是路径不正确。查看错误消息中的目录名称,我猜MusicKarma解决方案文件(.sln)与MusicKarma.csproj位于同一目录中。如果是这样,那么packages目录可能是错误的,因为默认情况下,packages目录将在solution目录内。所以我假设您的packages目录是:

C:\Users\Bryan\Documents\Visual Studio 2015\Projects\MusicKarma\packages

尽管你的MusicKarma.csproj文件正在寻找以下位置的props文件:

C:\Users\Bryan\Documents\Visual Studio 2015\Projects\packages\Microsoft.Net.Compilers.1.1.1\build
如果情况如此,您可以通过编辑MusicKarma.csproj文件中的路径或重新安装NuGet包来解决问题。

如何重新安装 NuGet 包。 - Ashish Kamble

14

我也遇到了这个错误。 我从.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>

删除那部分代码。如果您使用记事本打开.csproj文件,请删除Targuet代码,保存并正常打开。


1
你说的“I took this part of the .csproj file”是什么意思?你删掉了吗? - Noel Widmer
不,只需删除代码的那一部分。如果您使用记事本打开.csproj文件,删除Targuet代码,保存并正常打开即可。 - Joana Brandão

5
为什么需要对packages.config或.csproj文件进行操作?错误明确表示:使用NuGet Package Restore下载它们。
请按照以下说明使用:https://learn.microsoft.com/en-us/nuget/consume-packages/package-restore-troubleshooting
快速解决方案(适用于Visual Studio用户):
1.选择“工具”>“NuGet Package Manager”>“包管理器设置”菜单命令。
2.在“Package Restore”下设置两个选项。
3.选择确定。
4.重新构建项目。

我简直不敢相信这个帖子现在居然沉到这么下面了,+1,正是我正在寻找的并且觉得是很合乎逻辑的步骤... 真的很好用!但可惜的是,恢复按钮在视觉上很难找到,它在选项卡的末尾,也许可以附上一张截图来帮助大家? - FreeSoftwareServers

3

这是一篇有点老的帖子,但我最近遇到了这个问题。 我所做的就是从packages文件夹中删除所有的nuget包并还原它。 我成功地构建了解决方案。 希望对某人有所帮助。


2

从.csproj文件中删除此代码部分,并将项目移动到一个简短的绝对路径中。 这意味着最好将其位于一个简短的绝对路径上。

C:\Users\name\OneDrive\Desktop\spath1\test\test5....\mvc\Ecommerce

不要按照上述方式,你可以像下面这样移动项目:

C:\Users\name\OneDrive\Desktop\mvc\Ecommerce

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

0

我不太确定我的项目发生了什么变化,或者这种情况是因为 vs 2015、vs 2017 或 vs 2019 之间的 dll 版本崩溃而发生的。

我从 TFS 克隆了我的项目,然后出现了这种情况。

这是我做的:

  • 将 Microsoft.Net.Compilers 从 v.1 更新到 v.1.1
  • 在源代码控制资源管理器上检查待处理更改
  • 撤消文件的更改:.csproj、packages.config 和 web.config
  • 关闭 VS2015 - 清理解决方案 - 重新生成解决方案

0
在我的情况下,我删除了以前的项目并创建了一个新的项目,名称不同,当我构建项目时,它显示相同的错误。
我只是编辑了项目的csproj文件中的项目名称,然后就可以工作了...!

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