构建错误,该项目引用了NuGet

时间:2015-12-25 18:37:00

标签: .net visual-studio nuget nuget-package-restore

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

  

严重级代码描述项目文件行抑制状态   错误此项目引用了缺少的NuGet包   这台电脑。使用NuGet Package Restore下载它们。更多   信息,请参阅http://go.microsoft.com/fwlink/?LinkID=322105。该   遗失的文件是   .. \包\ Microsoft.Net.Compilers.1.1.1 \建立\ Microsoft.Net.Compilers.props。 MusicKarma C:\ Users \ Bryan \ Documents \ Visual   Studio 2015 \ Projects \ MusicKarma \ MusicKarma.csproj 268

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

我曾尝试使用Nuget Restore,但它一直说我有所有的包。

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

9 个答案:

答案 0 :(得分:27)

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

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

再次注意双重“.. \”。

答案 1 :(得分:21)

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

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

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包来解决问题。

答案 2 :(得分:11)

快速解决方案,对我和其他人来说就像一个魅力:

如果您使用的是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. 右键单击项目名称->重新加载项目

答案 3 :(得分: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>

答案 4 :(得分:0)

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

答案 5 :(得分:0)

为什么需要使用packages.config或.csproj文件进行操作?
该错误明确指出:使用NuGet软件包还原下载它们。
因此,请按照以下说明使用它:https://docs.microsoft.com/en-us/nuget/consume-packages/package-restore-troubleshooting

  

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

答案 6 :(得分:0)

就我而言,我删除了上一个项目并创建了一个其他名称的新项目,当我构建项目时,它向我显示了相同的错误。

我刚刚在Project的csproj文件中编辑了Project Name,它就起作用了!!

答案 7 :(得分:0)

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

答案 8 :(得分:0)

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

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

这就是我所做的:

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