我搜索了这个问题,但没有一个解决方案有效 . 我安装了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
-
我的解决方案中没有.nuget文件夹 .
-
我在解决方案中有一个packages文件夹,当我删除它时,似乎NuGet重建了依赖项,但项目仍然有上述错误 .
-
我尝试从TFS中删除项目,但没有修复它 .
-
除了上述错误,项目中的所有引用都有黄色警告标志,并说它们丢失了 .
-
当我检查项目的NuGet包管理器时,"missing"旁边的所有内容都有一个绿色勾号,包括Microsoft.Net.Compilers .
-
我尝试添加一个新的Web API / MVC项目,它遇到了类似的问题,其中大多数引用如Owin是带有黄色警告标志的"missing" .
27 回答
我今天遇到了同样的错误(错过了完全相同的包) . 我还创建了一个MVC Web API项目 .
它发生的原因是我将应用程序文件(包括.csproj)文件移动到另一个位置 . 我手动更新了.sln文件,但现在所有的包依赖项(Visual Studio 2015)存储在.csproj文件中 .
编辑.csproj文件并更正解决方案文件夹(包含packages文件夹)的相对路径解决了我的问题 .
我通过从
.csproj
文件中删除此代码解决了我的问题:如果您还有一个缺少的nuget包在构建解决方案时出现错误,请使用“工具”>“Nuget包管理器”>“包管理器控制台”中的Nuget Command Console使用以下命令 . 它将重新安装您当前的所有包 .
Update-Package -reinstall
请注意 - 这会更新整个解决方案的软件包,而不仅仅是项目 .
我有这个令人沮丧的消息 . 最终对我有用的是删除/ packages中的所有文件和文件夹,并让VS重新获取下一个版本的所有内容 .
提比略是对的 . 我不得不编辑我的.csproj文件,因为文件被移动并导致了这个问题
我在文件顶部和底部更改了
我通过从.csproj文件中删除以下代码解决了这个问题
两个答案的组合对我有用 . 首先,我修改了.csproj文件以删除对1.0.0版本的引用
然后呢
从它和它工作 .
Just enable NuGet Package Restore. 右键单击您的解决方案>选择'Enable NuGet Package Restore' .
这将使用NuGet.Config文件创建.nuget文件夹并修复我的问题 .
我正在使用VS2012并面临同样的错误 . 我从.csproj文件中删除了以下Target标记,它开始编译时没有任何错误 .
对我来说,问题是当我将解决方案复制到新文件夹并打开它时,它缺少Nuget文件夹,如下所示 . 我复制了这个文件夹,一切正常 . 注意:这个文件夹在我们的源代码管理中,但在此解决方案项目中没有,它在一个目录中 .
要在此处扩展一些答案,是的,您可以从.csproj文件中删除以下块:
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
这解决了这个问题,但在我的情况下,我注意到我对.NET.Compilers和.CodeDom.Providers有不同版本的其他引用:
当我的packages.config仅引用以下内容时:
从.csproj文件中删除1.0.0项修复了该问题 .
不确定这是否会对任何人有所帮助,但是当我从本地计算机删除源代码而没有将解决方案文件保存到TFS时,我遇到了这个问题 . (在初始开发期间,我右键单击并在解决方案资源管理器中检查项目,但忘记检查解决方案本身 . )当我需要再次处理此问题时,我在TFS中所拥有的只是.csproj文件,没有.sln文件 . 所以在VS中我做了一个文件 - >源代码控制 - >高级 - 从服务器打开并打开了.csproj文件 . 从那里我做了一个Save All,它问我想要保存.sln文件的位置 . 我将此.sln文件保存到项目目录中,其他文件夹(App_Data,App_Start等),而不是顶级目录 . 我终于弄明白我需要将.sln文件从项目文件夹中保存到目录中,这样它就与项目文件夹处于同一级别 . 我的所有路径都已解决,我能够再次构建它 .
对于那些偶然发现我遇到的问题的人(有些但不是所有的包都在构建服务器上恢复),对我来说最后一块拼图是在我的解决方案的根目录中添加一个NuGet.config,同时添加到.SLN正如David Ebbo在这里解释的那样:http://blog.davidebbo.com/2014/01/the-right-way-to-restore-nuget-packages.html .
从Ebbo的博文中,我的文件内容很简单
UPDATE:
NuGet API URL已针对v3进行了更改(截至2016年9月的当前状态) . 来自https://www.nuget.org/
错误消息完全正确 . 我尝试了所有的技巧,但都没有奏效 . 该项目(简单的MVC Web App测试)从Windows 8.1 VS 2015社区迁移到我在Windows 10上的新测试框 . 应用了VS 2015的所有最新更新 . 我甚至无法安装任何较新版本的编译器包 .
我最后只是将旧项目中的Microsoft.Net.Compilers.1.0.0复制到了新项目中并且工作正常 . 然后我可以开始将其他软件包更新到更新的版本 . 看起来像一个nuget项目升级过程错误给我 .
NOTE: 原始项目是在VS 2015中创建的并且没有任何遗留的nuget方法 .
适用于我的解决方案 - Visual Studio 2015 Enterprice,项目.NET 4.6.1
升级到更新3
安装Web开发人员工具
对我来说,包在正确的路径下,但包文件夹中的构建文件夹不是 . 我只是删除了它说缺少的所有软件包并重新构建了解决方案,并成功创建了构建文件夹和.props文件 . 所以错误消息是正确的告诉我有些事情是错过的 .
我解决了这个错误,实际上我在我的packages文件夹中有一个不同版本的MSTest.TestAdapter(1.3.2),而.csproj文件引用指向MSTest.TestAdapter(1.1.0) . 我已将所有MSTest.TestAdapter(1.1.0)替换为MSTest.TestAdapter(1.3.2),这解决了我的问题 .
我找不到任何解决方案,所以我将nuget.exe和powershell脚本的副本添加到名为prebuild.ps1的解决方案的根目录中,其中包含以下内容 .
我在我的构建中调用了这个powershell脚本 Pre-Build script path
当我将包文件夹与解决方案文件和项目文件夹一起复制时,我工作了我只是没有从以前的地方复制包文件夹 .
您还可以使用建议的错误消息作为提示 . 这是如何找到管理解决方案包,然后单击解决缺失的nuget包 .
而已
在
WebConfig
中评论编译器选项:重建如果一切正常,无需继续,否则右键单击项目,单击“卸载项目”再次右键单击项目并编辑.csproj文件
验证Codedom的路径,它在以前的路径中没有net45,手动添加,保存,加载,重建 . 它应该工作 .
正如许多人建议删除
<Target>
标签可能使其可编译 . 但是,请注意,当您为测试项目执行此操作时,它会产生副作用 .编译时我收到了与
MSTest.TestAdapter
nuget包有关的错误 . 通过删除<Target>
标记解决了该问题 . 虽然它使构建成功,但测试方法变得无法发现 . 测试资源管理器也赢得了工作 .我在使用
Visual Studio 2017
和.Net framework 4.7
时遇到过这种情况,在其他版本中很可能会发生这种情况对我来说问题是NuGet无法自动获取/更新包,因为完整的文件路径太大了 . Fixed by moving my solution to a folder in my Documents instead of a deeply nested folder .
然后可以右键单击解决方案并选择“Restore NuGet Packages”(如果您只是构建它并且让它为您执行它可能不是必需的),然后选择“Manage NuGet Packages for Solution”以获取所有包更新到最新版本 .
这是从Microsoft的网站下载的示例ASP MVC应用程序的解决方案 .
对于DevOps /构建工程师,您可以针对受影响的SLN修复此运行
nuget restore
,如果缺少SLN,则可以进行项目修复 . 我必须为我们所有的UWP项目进行CI / CD构建 .确保在Visual Studio或独立版本的构建从站上安装了nuget . 如果它在PATH中's the latter, make sure it'并跳过步骤2 .
打开VS Dev CMD控制台,或通过已打开的控制台加载它,您可以按照以下说明操作:
VS2015
call "%VS140COMNTOOLS%VsDevCmd.bat"
要么
VS2017
call "%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\VsDevCmd.bat"
call nuget restore MyStuff.SLN
或call nuget restore MyStuff.csproj
如果没有SLN .从Git部署时,我将此问题作为Azure中的失败构建 .
结果我的.gitignore从
..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.0\build\net46\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props
中排除了build
文件夹 .一旦
build
文件夹(强制)提交给Git,问题就解决了 .对我来说,我的gitignore文件忽略了我的包文件夹 . 以下gitignore线导致了这个问题 -
删除并恢复我的包文件夹 . 希望这有助于其他人 .
我意识到这个问题已经过时了,但是今天我遇到了同样的情况,想要投入我的最近发现此问题的人最多2美分 . 一个ASP MVC项目我手动移动到我的解决方案中的子文件夹,然后使用Visual Studio 2017删除并读回解决方案,提出了错误 . 将“lib”和“packages”文件夹移动到与MVC项目相同的子文件夹的根目录修复了我的问题 .