我搜索了这个问题,但没有一个解决方案有效。我安装了 Visual Studio Professional 2015 并且正在使用 TFS。我的 NuGet 版本是 3.1.6。这个问题只发生在我的 C# Web API/MVC 项目中。
我收到以下错误:
此项目引用此计算机上缺少的 NuGet 包。使用 NuGet 包还原下载它们。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 ..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props
我的解决方案中没有 .nuget 文件夹。我在解决方案中有一个 packages 文件夹,当我删除它时,NuGet 似乎确实重建了依赖项,但项目仍然存在上述错误。我尝试从 TFS 中删除该项目,但没有修复它。除了上述错误之外,项目中的所有引用都带有黄色警告标志,并表示它们丢失了。当我检查项目的 NuGet 包管理器时,“丢失”的所有内容旁边都有一个绿色勾号,包括 Microsoft.Net.Compilers。我尝试添加一个新的 Web API/MVC 项目,它遇到了类似的问题,其中大多数引用(例如 Owin)都“丢失”并带有黄色警告标志。
我通过从 .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>
我今天遇到了同样的错误(缺少完全相同的包)。我还创建了一个 MVC + Web API 项目。
发生这种情况是因为我将应用程序文件(包括 .csproj)文件移动到了另一个位置。我手动更新了 .sln 文件,但所有包依赖项现在(Visual Studio 2015)都存储在 .csproj 文件中。
编辑 .csproj 文件并更正解决方案文件夹(包含 packages 文件夹)的相对路径为我解决了这个问题。
注意 - 这会更新整个解决方案的包,而不仅仅是项目。
如果您在构建解决方案时还有一个缺失的 nuget 包会出现错误,请使用工具 > Nuget 包管理器 > 包管理器控制台中的 Nuget 命令控制台使用以下命令。它将重新安装您当前的所有软件包。
Update-Package –reinstall
更新:
您可以将特定项目名称作为参数传递。
Update-Package –reinstall -ProjectName SampleApp
我有这个确切的令人沮丧的信息。最终对我有用的是删除 /packages 中的所有文件和文件夹,并让 VS 在下一次构建时重新获取所有内容。
Restore Nuget Packages
。
这种方式解决了我的错误:在 Visual Studio 2015+ 解决方案资源管理器中打开 .csproj 文件进行更新:
右键项目名称 -> 卸载项目
右键单击项目名称 -> 编辑 .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>
右键项目名称 -> 重新加载项目
最后构建您的解决方案。
..\..\packages
或 ..\..\..\packages
或类似的。
提比留是正确的。当文件被移动并导致此问题时,我不得不编辑我的 .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'))" />
两个答案的组合对我有用。首先我修改了 .csproj 文件以删除对 1.0.0 版本的引用
< Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild" >
----Error---
< /Target>
然后做了
Update-Package -Reinstall
从那里开始,它奏效了。
我通过以下步骤解决了同样的问题
从 package.config 文件中删除了包
第 2 点和第 3 点是由其他用户给出的,我感谢这些用户。第 1 点,从 package.config 文件中删除 Microsoft.CodeDom.Providers.DotNetCompilerPlatform
更为重要。此外,在运行第 3 点中提到的命令后,问题解决了。删除了所有不需要的包并更新了所需的包参考。
希望这可以帮助某人。
对我来说,问题是当我将解决方案复制到一个新文件夹并打开它时,它缺少 Nuget 文件夹,如下所示。我复制了这个文件夹,一切正常。注意:同一文件夹在我们的源代码管理中,但不在此解决方案项目中,它位于一个目录中。
https://i.stack.imgur.com/n2N7B.png
要在这里扩展一些答案,是的,您可以从 .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 项解决了该问题。
只需启用 NuGet 包还原。右键单击您的解决方案 > 选择“启用 NuGet 包还原”。
https://i.stack.imgur.com/CXtf7.jpg
这将使用 NuGet.Config 文件创建 .nuget 文件夹并解决我的问题。
我正在使用 VS2012 并面临同样的错误。我从 .csproj 文件中删除了以下目标标记,它开始编译而没有任何错误。
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
-- Error messages within Target Tag
</Target>
对于在这里遇到我遇到的问题的任何人(一些但不是所有软件包都在构建服务器上恢复),对我来说,最后的难题是在我的解决方案的根目录中添加一个 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 App 测试)从 Windows 8.1 VS 2015 社区移动到我在 Windows 10 上的新测试箱。应用了 VS 2015 的所有最新更新。我什至无法安装任何更新版本的编译器包。
Loop:
<LOOP>This seems to be a Ground Hog Day phenomena.</LOOP>
GoTo Loop
我最后只是将旧项目中的 Microsoft.Net.Compilers.1.0.0 复制到新项目中,它就可以工作了。然后我可以开始将其他软件包更新到较新的版本。对我来说,这看起来像是一个 nuget 项目升级过程错误。
注意:原始项目是在 VS 2015 中创建的,没有任何遗留的 nuget 方法。
适用于我的解决方案 - Visual Studio 2015 Enterprice,项目 .NET 4.6.1
升级到 Update 3 安装 Web 开发者工具
https://i.stack.imgur.com/alpUM.png
对我来说,包在正确的路径下,但包文件夹中的构建文件夹不在。我只是删除了它说丢失的所有包并重建了解决方案,它成功地创建了构建文件夹和 .props 文件。所以错误消息是正确的,它告诉我有什么事情是遗漏的。
从 Git 部署时,我遇到了这个问题,因为 Azure 中的构建失败。
结果我的 .gitignore 将 build
文件夹从 ..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.0\build\net46\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props
中排除。
将 build
文件夹(强制)提交给 Git 后,问题就解决了。
对我来说,我的 gitignore 文件忽略了我的包文件夹。以下 gitignore 行导致了问题 -
**/packages/*
删除并恢复了我的包文件夹。希望这对其他人有帮助。
我找不到任何解决方案,因此我将 nuget.exe 的副本和 powershell 脚本添加到名为 prebuild.ps1 的解决方案的根目录中,其中包含以下内容。
$nugetexe = 'nuget.exe'
$args = 'restore SOLUTION_NAME_HERE.sln'
Start-Process $nugetexe -ArgumentList $args
https://i.stack.imgur.com/loH2P.jpg
当我复制包文件夹以及解决方案文件和项目文件夹时,我的工作。我只是没有从以前的地方复制包文件夹。
您还可以使用建议的错误消息作为提示。以下是如何找到解决方案的管理包,然后单击解决缺少的 nuget 包。
而已
注释 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=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>-->
在包配置文件中更新包的最新版本
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.4" targetFramework="net452" />
如果一切正常,则重新构建,无需继续,否则右键单击项目,单击“卸载项目”再次右键单击项目并编辑 .csproj 文件
验证 Codedom 的路径,以前的路径中没有 net45,手动添加,保存,加载,重建。它应该工作。
<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')" />
许多人建议删除 <Target>
标记可能使其可编译。但是,请注意,当您为测试项目执行此操作时,它会产生副作用。
编译时出现与 MSTest.TestAdapter
nuget 包相关的错误。通过删除 <Target>
标记解决了该问题。尽管它使构建成功,但测试方法变得不可发现。测试资源管理器不会列出该项目中的测试方法,并且运行测试或调试测试也不会正常工作。
我在使用 Visual Studio 2017
和 .Net framework 4.7
时遇到了这个问题,在其他版本中也很可能发生
$(SolutionDir)
工作但更新失败。我问了那个here。你有什么解决办法吗?
对我来说,问题是 NuGet 无法自动获取/更新包,因为完整的文件路径太大。通过将我的解决方案移动到我的文档中的文件夹而不是深度嵌套的文件夹来修复。
然后可以右键单击解决方案并选择“Restore NuGet Packages”(如果您只是构建它并让它为您完成,这可能不是必需的),然后选择“Manage NuGet Packages for Solution”以获取所有包更新到最新版本。
这是针对从 Microsoft 网站下载的示例 ASP MVC 应用程序的解决方案。
对于 DevOps/构建工程师,您可能可以针对受影响的 SLN 或项目(如果您缺少 SLN)修复此运行 nuget restore
。我必须为我们所有 UWP 项目的 CI/CD 构建执行此操作。
确保 nuget 安装在 Visual Studio 或独立的构建从属上。如果是后者,请确保它在 PATH 中并跳过步骤 2。打开 VS Dev CMD 控制台,或通过已打开的控制台加载它,您可以按照以下说明进行操作:VS2015 call "%VS140COMNTOOLS%VsDevCmd.bat " 或 VS2017 调用 "%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\VsDevCmd.bat" 调用 nuget restore MyStuff.SLN 或调用 nuget restore MyStuff.csproj 如果没有 SLN。
不确定这是否会对任何人有所帮助,但是当我从本地计算机中删除源代码而没有将解决方案文件保存到 TFS 时,我遇到了这个问题。 (在最初的开发过程中,我在解决方案资源管理器中右键单击并签入项目,但忘记签入解决方案本身。)当我需要再次处理这个问题时,我在 TFS 中只有 .csproj 文件,没有 .sln 文件。所以在VS中我做了一个文件->源代码控制->高级-从服务器打开并打开.csproj文件。从那里我做了一个 Save All,它问我想把 .sln 文件保存在哪里。我将此 .sln 文件与其他文件夹(App_Data、App_Start 等)一起保存到项目目录中,而不是顶级目录。我终于发现我需要将 .sln 文件保存在项目文件夹中的一个目录中,以便它与项目文件夹处于同一级别。我所有的路径都解决了,我能够再次构建它。
我解决了这个错误,实际上我的包文件夹中有不同版本的 MSTest.TestAdapter(1.3.2),并且 .csproj 文件中的引用指向 MSTest.TestAdapter(1.1.0)。我已将所有 MSTest.TestAdapter(1.1.0) 替换为 MSTest.TestAdapter(1.3.2),这解决了我的问题。
我意识到这个问题很老了,但是我今天遇到了同样的情况,想为最近发现这个问题的任何人投入 2 美分。我手动移动到解决方案中的子文件夹的 ASP MVC 项目,然后使用 Visual Studio 2017 删除并读取到解决方案中,出现了上述错误。将“lib”和“packages”文件夹移动到与 MVC 项目相同的子文件夹的根目录下解决了我的问题。
我遇到了同样的问题,事实证明我引用的项目之一在解决方案目录之外(因此没有共享相同的“/包”文件夹)。对我有用的解决方案是打开参考项目的解决方案并在那里构建它。一旦该项目建成,错误就消失了。