构建错误,此项目引用 NuGet

Posted

技术标签:

【中文标题】构建错误,此项目引用 NuGet【英文标题】:Build error, This project references NuGet 【发布时间】:2015-12-25 18:36:59 【问题描述】:

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

严重性代码描述项目文件行抑制状态 错误此项目引用了缺少的 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 工作室 2015\Projects\MusicKarma\MusicKarma.csproj 268

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

我尝试使用 Nuget Restore,但它一直说我拥有所有软件包。

当我将此项目从 TFS 带到我的一台计算机时,就会发生这种情况。

【问题讨论】:

【参考方案1】:

对我和其他人来说非常有用的快速解决方案:

如果您使用的是 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+ 解决方案资源管理器中:

    右键项目名称->卸载项目 右键项目名称->编辑.csproj 从文件中删除上面指定的行并保存 右键项目名称->重新加载项目

【讨论】:

我在下面看到了另一个答案,它只删除了 部分,因为我没有 标记部分并且对我有用,但是这个答案有卸载和重新加载的说明,因此有助于很多。感谢分享@Natasha 我用这个编译成功。 从 .csproj 中删除上述行将禁用恢复 Nuget 包的功能。 是的,我在 VS 2017 上遇到了类似的问题。我删除了所有带有 Microsoft.Net.Compilers.1.0.0 值的 Import 和 Error 行【参考方案2】:

当我在文件系统(不在我的解决方案中)创建文件夹并移动一些项目时,我出现了这个问题。

原来包路径是相对于 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'))" />

再次注意双“..\”。

【讨论】:

感谢您无价的回答,您拯救了我的一天 :) 谢谢,你帮了我很多,小心包文件夹的路径 在我的情况下,我将 ..\packages 更改为 .\packages,它工作得很好【参考方案3】:

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

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

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

当您的 MusicKarma.csproj 文件在以下位置寻找道具文件时:

C:\Users\Bryan\Documents\Visual Studio 2015\Projects\packages\Microsoft.Net.Compilers.1.1.1\build

如果是这种情况,您可以通过编辑 MusicKarma.csproj 文件中的路径或重新安装 NuGet 包来解决问题。

【讨论】:

如何重新安装 nuget 包【参考方案4】:

我也有这个错误 我从 .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代码,保存,然后正常打开

【讨论】:

你的意思是:我拿走了 .csproj 文件的这一部分?你删了吗? 不,只是删除那部分代码。如果你用记事本打开.csproj文件,删除Targuet代码,保存,然后正常打开【参考方案5】:

为什么需要对 packages.config 或 .csproj 文件进行操作? 该错误明确表示:使用 NuGet 包还原下载它们。 相应地使用它这个指令:https://docs.microsoft.com/en-us/nuget/consume-packages/package-restore-troubleshooting:

Visual Studio 用户的快速解决方案 1.选择工具 > NuGet 包管理器 > 包管理器设置菜单命令。 2.在包还原下设置这两个选项。 3.选择确定。 4.再次构建您的项目。

【讨论】:

我无法相信这是线程有多深,+1,正是我正在寻找的并且认为这是合乎逻辑的步骤......就像一个魅力!很难在视觉上找到 restore 按钮,它位于功能区的末尾,也许屏幕显示会有所帮助?【参考方案6】:

这是一个有点旧的帖子,但我最近遇到了这个问题。 我所做的只是从包文件夹中删除所有 nuget 包并恢复它。 我能够成功构建解决方案。 希望对某人有所帮助。

【讨论】:

【参考方案7】:

在我的例子中,我删除了以前的项目并创建了一个不同名称的新项目,当我构建项目时它显示了同样的错误。

我刚刚在项目的 csproj 文件中编辑了项目名称,它成功了...!

【讨论】:

【参考方案8】:

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

【讨论】:

【参考方案9】:

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

我已经从 TFS 克隆了我的项目,并且发生了这种情况。

这就是我所做的:

将 Microsoft.Net.Compilers 从 v.1 更新到 v.1.1 签入源代码管理浏览器上的待定更改 撤消对文件的更改:.csproj、packages.config 和 web.config 关闭 VS2015 - 清洁解决方案 - 重建解决方案

【讨论】:

以上是关于构建错误,此项目引用 NuGet的主要内容,如果未能解决你的问题,请参考以下文章

为啥 dotnet 在 .NET Framework 4.5 项目上构建会抛出“此项目引用了缺失的 NuGet 包”?

此项目引用此计算机上缺少的 NuGet 包。

错误目录结构中的 NuGet 引用

NuGet 引用存储在哪里?

缺少 TFS msbuild Nuget 包

无法在 Visual Studio 2017 中构建我的单元测试项目