NuGet包缺失

我search这个问题,但没有解决scheme的工作。 我安装了Visual Studio Professional 2015,并使用了TFS。 我的NuGet版本是3.1.6。 这个问题只发生在我的C#Web API / MVC项目中。

我收到以下错误:

这个项目引用了这台计算机上缺less的NuGet包。 使用NuGet软件包恢复下载它们。 有关更多信息,请参阅http://go.microsoft.com/fwlink/?LinkID=322105 。 缺less的文件是.. \ packages \ Microsoft.Net.Compilers.1.0.0 \ build \ Microsoft.Net.Compilers.props

  1. 我的解决scheme中没有.nuget文件夹。
  2. 我在解决scheme中有一个包文件夹,当我删除它,似乎NuGet重build依赖项,但项目仍然有上述错误。
  3. 我试图从TFS中删除项目,并没有解决它。
  4. 随着上述错误,项目中的所有参考文件都有黄色的警告标志,并说他们错过了。
  5. 当我检查项目的NuGet包pipe理器时,所有“缺失”的东西旁边都会有一个绿色的勾号,包括Microsoft.Net.Compilers。
  6. 我尝试添加一个新的Web API / MVC项目,并且遇到了一个类似的问题,那就是像Owin这样的大部分引用都是黄色的警告标志。

我今天有同样的错误(缺less完全相同的包)。 我还创build了一个MVC + Web API项目。

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

编辑.csproj文件并更正解决scheme文件夹(包含packages文件夹)的相对path解决了我的问题。

我通过从.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> 

如果您在构build解决scheme时遇到了一个错误的nuget包,那么在使用Nuget命令控制台的工具> Nuget Package Manager>软件包pipe理器控制台中使用以下命令时会出现错误。 它会重新安装你所有的当前软件包。

Update-Package -reinstall

我有这个确切的令人沮丧的消息。 最后我的工作是删除/包内的所有文件和文件夹,并让VS重新获取下一个版本的一切。

提比留是正确的。 我不得不编辑我的.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')" /> 

我改变了文件的顶部和底部

 <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'))" /> 

我通过从.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'))" /> 

只要启用NuGet软件包还原。 右键点击你的解决scheme>select“启用NuGet包恢复”。

右键点击你的解决方案>选择“启用NuGet包恢复”

这将使用NuGet.Config文件创build.nuget文件夹并解决我的问题。

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

 <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> -- Error messages within Target Tag </Target> 

2个答案的组合为我工作。 首先,我修改了.csproj文件以删除对1.0.0版本的引用

 < Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild" > ----Error--- < /Target> 

然后呢

 Update-Package -Reinstall 

从和它的工作。

对我来说,问题是,当我将解决scheme复制到一个新文件夹并打开它时,它丢失了如下所示的Nuget文件夹。 我复制这个文件夹,一切工作。 注意:这个相同的文件夹在我们的源代码pipe理中,但是在这个解决scheme项目中没有,它是在一个目录中。

在这里输入图像说明

对于任何人在这里遇到的问题(有些但不是所有的包都在构build服务器上恢复),对我来说最后一块难题是在我的解决scheme的根目录中添加一个NuGet.config,与.SLN像David Ebbo这样解释: http ://blog.davidebbo.com/2014/01/the-right-way-to-restore-nuget-packages.html。

从Ebbo的博客文章来看,我的文件内容简单

 <?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <add key="nuget.org" value="https://www.nuget.org/api/v2/" /> </packageSources> </configuration> 

更新:

NuGet API的URL已经更改为v3(截至2016年9月)。 从https://www.nuget.org/

 <add key="nuget.org" value="https://api.nuget.org/v3/index.json" /> 

错误消息是完全正确的。 我尝试了所有的技巧,没有工作。 该项目(简单的MVC Web应用程序testing)从Windows 8.1 VS 2015社区迁移到我在Windows 10上的新testing框。应用了所有最新的VS 2015更新。 我什至不能安装任何新版本的编译器软件包。

 Loop: <LOOP>This seems to be a Ground Hog Day phenomena.</LOOP> GoTo Loop 

我终于把旧的项目中的Microsoft.Net.Compilers.1.0.0复制到了新的项目中。 然后我可以开始更新其他软件包到更新的版本。 看起来像一个nuget项目升级过程中的bug。

注意:原始项目是在VS 2015中创build的,没有任何传统的nuget方法。

为了扩展这里的一些答案,是的,你可以从你的.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\ 

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

 <package id="Microsoft.Net.Compilers" version="2.0.1" <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.3" 

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

我无法find任何解决scheme,所以我添加了nuget.exe和powershell脚本的副本到名为prebuild.ps1的解决scheme的根目录下面的内容。

 $nugetexe = 'nuget.exe' $args = 'restore SOLUTION_NAME_HERE.sln' Start-Process $nugetexe -ArgumentList $args 

我在Pre-Build脚本path中的 build中调用了这个powershell脚本 在这里输入图像说明

当我复制包文件夹以及解决scheme文件和项目文件夹时,我的工作。 我只是没有从以前的地方复制包文件夹。

您也可以使用build议的错误消息作为提示。 这是如何find解决scheme的pipe理包,然后点击parsing缺less的nuget包。

而已

解决scheme在我的情况下工作 – Visual Studio 2015 Enterprice,项目.NET 4.6.1

  1. 升级到更新3
  2. 安装Web开发人员工具

视觉工作室安装wizzard

WebConfig注释编译器选项:

 <!--<system.codedom> <compilers> <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" /> <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" /> </compilers> </system.codedom>--> 

在软件包configuration文件中更新软件包的最新版本

  <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.4" targetFramework="net452" /> 

重新生成,如果一切正常,不需要继续,否则右键单击该项目,单击“卸载项目”再次右键单击项目并编辑.csproj文件

validationCodedom的path,在前面的path中没有net45,手动添加,保存,加载,重build。 它应该工作。

 <Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.4\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.4\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" /> 

许多人build议删除<Target>标签可能会使其可编译。 但是,当您为testing项目进行testing时,请小心这样的事实。

编译时遇到与MSTest.TestAdapter nuget包相关的错误。 通过删除<Target>标签来解决该问题。 虽然它使得构build成功,但是testing方法变得无法发现。 testing浏览器不会列出该项目中的testing方法,而运行testing或debuggingtesting也不能正常工作。

我在使用Visual Studio 2017.Net framework 4.7遇到过这个问题,在其他版本中可能会发生

我的问题是NuGet无法自动获取/更新软件包,因为完整的文件path太大了。 通过将我的解决scheme移到我的文档中的文件夹而不是深度嵌套的文件夹来修复

然后右键点击解决scheme,select“恢复NuGet包”(如果你只是build立它,让它为你做),然后select“pipe理解决scheme的NuGet包”来获取所有包更新到最新版本。

这是从微软网站下载的示例ASP MVC应用程序的解决scheme。