缺少NuGet包

Que*_*ion 281 visual-studio nuget visual-studio-2015

我搜索了这个问题,但没有一个解决方案有效.我安装了Visual Studio Professional 2015,我正在使用TFS.我的NuGet版本是3.1.6.这个问题只发生在我的C#Web API/MVC项目中.

我收到以下错误:

此项目引用此计算机上缺少的NuGet包.使用NuGet Package Restore下载它们.有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkID=322105.丢失的文件是..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props

  1. 我的解决方案中没有.nuget文件夹.
  2. 我在解决方案中有一个packages文件夹,当我删除它时,似乎NuGet重建了依赖项,但项目仍然有上述错误.
  3. 我尝试从TFS中删除该项目,但它没有修复它.
  4. 除了上述错误,项目中的所有引用都有黄色警告标志,并说它们丢失了.
  5. 当我检查项目的NuGet包管理器时,"缺少"的所有内容旁边都有一个绿色勾号,包括Microsoft.Net.Compilers.
  6. 我尝试添加一个新的Web API/MVC项目,它遇到了类似的问题,其中大多数引用如Owin"缺少"黄色警告标志.

DKR*_*DKR 342

我通过从.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>
Run Code Online (Sandbox Code Playgroud)

  • 我错了,但我相信这是"用锤子拍苍蝇".如果由于某种原因,发布的位置丢失了任何其他所需的nuget包,它将*不*错误,给你一个误报(即部署成功,但系统失败).不是粉丝,但我不打算投票,因为我还不熟悉nuget的各个方面. (27认同)
  • 这对我有用......谁能告诉我为什么? (7认同)
  • 确认这个问题在VS 2017中仍然存在.我将一个项目从visual studio 2015迁移到2017年,并在2017年首次编译时收到此错误消息.这修复了该错误. (7认同)
  • 由于我在多个单独的解决方案中引用项目,因此接受的答案将无效.这是唯一的解决办法.评论它,它就像一个魅力. (4认同)
  • 这对我也有用.奇怪的是,错误消息在proj文件本身中是硬编码的... (4认同)
  • 为什么通过这样做删除功能,冒着破坏项目的风险?正如@HeyZiko所指出的,这可能会在以后导致问题.我可以做错误声明"启用包恢复".在这个页面的某个地方看到我的回答...... (2认同)
  • 我认为这不是一个好的答案,就像任何测试用例没有通过然后评论那样,你的任务就完成了.但这不是一种方式..您必须找到根本原因并解决它,而不是评论或删除此类代码. (2认同)
  • 这可能是“用锤子扑打苍蝇”,但就我而言,我的项目具有零零担程序包(解决方案中的另一个项目确实起作用,但如果有所作为,但该项目编译得很好),并且可以选择实际上,已选中“启用程序包还原”。 (2认同)

小智 253

我今天遇到了同样的错误(错过了完全相同的包).我还创建了一个MVC + Web API项目.

它发生的原因是我将应用程序文件(包括.csproj)文件移动到另一个位置.我手动更新了.sln文件,但现在所有的包依赖项(Visual Studio 2015)都存储在.csproj文件中.

编辑.csproj文件并更正解决方案文件夹(包含packages文件夹)的相对路径解决了我的问题.

  • 如果缺少移动,则将Microsoft.Net.Compilers ...文件夹从旧包文件夹复制到新包位置可能是最后一步. (2认同)
  • 我刚刚从我的计算机上移除了那个包,它起作用了. (2认同)
  • 将项目从一个位置移动到另一个位置后,我也遇到了同样的问题。修复“.csproj”文件中包的路径修复了这个问题。 (2认同)
  • @MiłoszWieczorek我尝试在Package Manager Console中运行该命令,但它没有解决问题.它重新加载了所有包,但仍未找到引用. (2认同)

小智 43

请注意 - 这会更新整个解决方案的软件包,而不仅仅是项目.

如果您还有一个缺少的nuget包在构建解决方案时出现错误,请使用工具> Nuget包管理器>包管理器控制台中的Nuget Command Console使用以下命令.它将重新安装您当前的所有包.

Update-Package -reinstall

  • 注意......这会更新整个解决方案的软件包而不仅仅是项目. (16认同)
  • 您可以添加-ProjectName参数,使其仅适用于特定项目,而不是整个解决方案. (8认同)
  • 我试过这个.它没有解决我的问题. (3认同)
  • 这对我有用。在一个系统上通过 git 推送更改并在另一个系统上拉取它们后,错误出现了。也许我的 .gitignore 没有为 nuget 包正确配置。 (2认同)
  • 这对我有用。NuGet 不断抱怨缺少包,但 Visual Studio 不会自动解决。完全运行需要几分钟,但这个命令解决了我的问题。 (2认同)
  • VS2017 在这个过程中崩溃了,它打破了一切 (2认同)

小智 18

我有这个令人沮丧的消息.最终对我有用的是删除/ packages中的所有文件和文件夹,并让VS重新获取下一个版本的所有内容.

  • 当我右键单击解决方案时,我没有任何恢复 Nuget 包....我正在使用 VS 2013.. (3认同)
  • 我在解决方案和`Restore Nuget Packages`上单击了右键。 (2认同)

Tom*_*kel 15

提比略是对的.我必须编辑我的.csproj文件,因为文件被移动并导致了这个问题

 <Import Project="..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
Run Code Online (Sandbox Code Playgroud)

我在文件顶部和底部更改了

<Error Condition="!Exists('..\..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props'))" />
<Error Condition="!Exists('..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.1\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))" />
Run Code Online (Sandbox Code Playgroud)


Moh*_*wan 10

我通过从.csproj文件中删除以下代码解决了这个问题

<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('..\..\..\Assemblies\NuGet\SpecFlow.Plus.Excel.1.4.2\build\SpecFlow.Plus.Excel.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\Assemblies\NuGet\SpecFlow.Plus.Excel.1.4.2\build\SpecFlow.Plus.Excel.targets'))" />
Run Code Online (Sandbox Code Playgroud)


小智 8

两个答案的组合对我有用.首先,我修改了.csproj文件以删除对1.0.0版本的引用

< Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild" >

  ----Error---

< /Target>
Run Code Online (Sandbox Code Playgroud)

然后呢

Update-Package -Reinstall
Run Code Online (Sandbox Code Playgroud)

从它和它工作.


Abd*_*lah 8

this way solved my error : To open .csproj file for update in Visual Studio 2015+ Solution Explorer:

Right-click project name -> Unload Project

右键单击项目名称->编辑.csproj

删除以下行:

<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.0.0\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props'))" />
    <Error Condition="!Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))" />
    <Error Condition="!Exists('packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" Text="$([System.String]::Format('$(ErrorText)', 'packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props'))" />
    <Error Condition="!Exists('packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" Text="$([System.String]::Format('$(ErrorText)', 'packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))" />
  </Target>
Run Code Online (Sandbox Code Playgroud)

右键单击项目名称->重新加载项目

最后构建您的解决方案。


Nic*_*cow 7

只需启用NuGet Package Restore.右键单击解决方案>选择"启用NuGet包还原".

右键单击解决方案>选择

这将使用NuGet.Config文件创建.nuget文件夹并修复我的问题.

  • 它并不适合我,它说:"所有软件包都已安装,没有任何东西可以恢复." (16认同)

Kar*_*hik 6

我通过以下步骤解决了同样的问题

  1. <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="2.0.1" targetFramework="net46" />从 package.config 文件中删除了包。
  2. 编辑 .csproj 项目文件并删除以下设置。 <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.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\build\net46\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\build\net46\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props'))" />   </Target>

    1. 转到包管理器控制台并运行命令 Update-Package –reinstall

第 2 点和第 3 点是其他用户提供的,我感谢这些用户。第 1 点,Microsoft.CodeDom.Providers.DotNetCompilerPlatform从 package.config 文件中删除更重要。此外,在运行第 3 点中提到的命令后,问题解决了。删除了所有不需要的包并更新了所需的包参考。

希望这可以帮助某人。


MAK*_*MAK 5

我正在使用VS2012并面临同样的错误.我从.csproj文件中删除了以下Target标记,它开始编译时没有任何错误.

<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
  -- Error messages within Target Tag
</Target>
Run Code Online (Sandbox Code Playgroud)


Joh*_*ers 5

对我来说,问题是当我将解决方案复制到新文件夹并打开它时,它缺少Nuget文件夹,如下所示.我复制了这个文件夹,一切正常.注意:这个文件夹在我们的源代码管理中,但在此解决方案项目中没有,它在一个目录中.

在此输入图像描述


Bri*_*ats 5

要在此处扩展一些答案,是的,您可以从.csproj文件中删除以下块:

<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">

这解决了这个问题,但在我的情况下,我注意到我对.NET.Compilers和.CodeDom.Providers有不同版本的附加引用:

<Error Condition="!Exists('..\packages\Microsoft.Net.Compilers.1.0.0
<Error Condition="!Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\

<Error Condition="!Exists('..\packages\Microsoft.Net.Compilers.2.0.1
<Error Condition="!Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.3\
Run Code Online (Sandbox Code Playgroud)

当我的packages.config仅引用以下内容时:

<package id="Microsoft.Net.Compilers" version="2.0.1"
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.3"
Run Code Online (Sandbox Code Playgroud)

从.csproj文件中删除1.0.0项修复了该问题.