我搜索了这个问题,但没有一个解决方案有效。我安装了Visual Studio Professional 2015,我正在使用TFS。我的NuGet版本是3.1.6。这个问题只发生在我的C#Web API / MVC项目中。
我收到以下错误:
此项目引用了缺少的NuGet包 电脑。使用NuGet Package Restore下载它们。更多 信息,请参阅http://go.microsoft.com/fwlink/?LinkID=322105。该 遗失的文件是 .. \包\ Microsoft.Net.Compilers.1.0.0 \建立\ Microsoft.Net.Compilers.props
答案 0 :(得分:314)
我通过从.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>
答案 1 :(得分:228)
我今天遇到了同样的错误(错过了完全相同的包)。我还创建了一个MVC + Web API项目。
它发生了,因为我将应用程序文件(包括.csproj)文件移动到另一个位置。我手动更新了.sln文件,但现在所有的包依赖项(Visual Studio 2015)都存储在.csproj文件中。
编辑.csproj文件并更正解决方案文件夹(包含packages文件夹)的相对路径为我解决了这个问题。
答案 2 :(得分:41)
请注意 - 这会更新整个解决方案的软件包,而不仅仅是项目。
如果您还有一个缺少的nuget包在构建解决方案时出现错误,请使用以下命令,使用Nuget Command Console from Tools&gt; Nuget包管理器&gt;包管理器控制台。它将重新安装您当前的所有软件包。
Update-Package -reinstall
答案 3 :(得分:17)
我有这个令人沮丧的消息。最终对我有用的是删除/ packages中的所有文件和文件夹,让VS重新获取下一次构建的所有内容。
答案 4 :(得分:12)
Tiberiu是对的。我不得不编辑我的.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'))" />
答案 5 :(得分:11)
我通过从.csproj文件中删除以下代码来解决此问题
MonoAndroid403
答案 6 :(得分:8)
两个答案的组合对我有用。首先,我修改了.csproj文件以删除对1.0.0版本的引用
< Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild" >
----Error---
< /Target>
然后做了
Update-Package -Reinstall
从它起作用。
答案 7 :(得分:7)
答案 8 :(得分:5)
我正在使用VS2012并面临同样的错误。我从.csproj文件中删除了以下Target标记,它开始编译时没有任何错误。
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
-- Error messages within Target Tag
</Target>
答案 9 :(得分:5)
对我来说,问题是当我将解决方案复制到新文件夹并打开它时,它缺少Nuget文件夹,如下所示。我复制了这个文件夹,一切正常。注意:这个文件夹在我们的源代码管理中,但在此解决方案项目中没有,它在一个目录中。
答案 10 :(得分: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\
当我的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项目修复了该问题。
答案 11 :(得分:4)
我通过以下步骤解决了相同的问题
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="2.0.1" targetFramework="net46" />
。编辑.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>
Update-Package –reinstall
第2点和第3点是其他用户给出的,我感谢那些用户。要点1,从package.config文件中删除Microsoft.CodeDom.Providers.DotNetCompilerPlatform
更重要。同样,在运行第3点中提到的命令后,该问题得以解决。删除所有不需要的软件包,并更新所需的软件包参考。
希望这对某人有帮助。
答案 12 :(得分:4)
这种方式解决了我的错误: 要在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>
右键单击项目名称->重新加载项目
最后构建您的解决方案。
答案 13 :(得分:2)
对于那些偶然发现我遇到的问题的人(有些但不是所有的软件包都在构建服务器上恢复),对我来说最后一块拼图就是在我的解决方案的根目录中添加一个NuGet.config,兄弟姐妹David Ebbo在这里解释的.SLN文件: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网址已针对v3进行了更改(截至2016年9月的当前状态)。来自https://www.nuget.org/
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
答案 14 :(得分:1)
答案 15 :(得分:1)
错误消息完全正确。我尝试了所有的技巧,没有一个工作。该项目(简单的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方法。
答案 16 :(得分:1)
我已解决此错误,实际上我的包文件夹中有MSTest.TestAdapter(1.3.2)的另一个版本,.csproj文件中的引用指向MSTest.TestAdapter(1.1.0)。我已将所有MSTest.TestAdapter(1.1.0)替换为MSTest.TestAdapter(1.3.2),这解决了我的问题。
答案 17 :(得分:1)
当从Git部署时,由于Azure中的构建失败,我遇到了这个问题。
原来我的.gitignore是从if count > 1 {
for i in (0...count-2).reversed() {
print(i)
}
}
中排除了build
文件夹。
将..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.0\build\net46\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props
文件夹(强制)提交给Git后,问题就解决了。
答案 18 :(得分:1)
对我来说,软件包是在正确的路径下,但是包文件夹中的构建文件夹不是。我只是删除了所有丢失的软件包并重新构建了解决方案,并成功创建了构建文件夹和.props文件。所以错误信息是正确的,告诉我事情是错过。
答案 19 :(得分:0)
我遇到了同样的问题,原来我引用的项目之一在解决方案目录之外(因此没有共享相同的“ / packages”文件夹)。对我有用的解决方案是打开参考项目的解决方案并在其中构建它。建立该项目后,错误就消失了。
答案 20 :(得分:0)
您还可以使用建议的错误消息作为提示。在这里,找到管理包解决方案,然后单击解决缺失的nuget包。
就是这样
答案 21 :(得分:0)
如果将package.config
与此构建命令一起使用,也会出现此错误
MSBuild.exe /t:Restore MySln.sln
在这种情况下,请切换到nuget restore
命令或使用PackageReference
。
答案 22 :(得分:0)
似乎有多种原因。
对我而言,.csproj文件包含对Microsoft.Bcl.Build.targets的两个不同版本的引用:
<Import Project="..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets" Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" />
<Target Name="EnsureBclBuildImported" BeforeTargets="BeforeBuild" Condition="'$(BclBuildImported)' == ''">
<Error Condition="!Exists('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text="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=317567." HelpKeyword="BCLBUILD2001" />
<Error Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text="The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568." HelpKeyword="BCLBUILD2002" />
</Target>
<Import Project="..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets" Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" />
<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.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets'))" />
</Target>
我删除了旧的参考文献,并解决了问题。
答案 23 :(得分:0)
一个不同的用户名是造成这种情况的常见原因,Nuget将所有内容下载到"C:\Users\USER_NAME\source\repos"
中,并且如果您以前使用其他用户名设置了项目,则.csproj文件可能仍然在其中包含该旧用户名,只需打开它,然后进行搜索即可将"C:\Users\_OLD_USER_NAME\source\repos"
替换为"C:\Users\NEW_USER_NAME\source\repos"
。
答案 24 :(得分:0)
就我而言,*。csproj文件中缺少<RestorePackages>true</RestorePackages>
。不必删除我在先前答案中看到的代码片段。
答案 25 :(得分:0)
我的解决方案中的文件夹名为“ .NET Project”。通过将其重命名为“ NET Project”,一切正常。所以开头的点是个坏主意。
答案 26 :(得分:0)
我找不到任何解决方案,所以我将nuget.exe和powershell脚本的副本添加到名为prebuild.ps1的解决方案的根目录中,其中包含以下内容。
$nugetexe = 'nuget.exe'
$args = 'restore SOLUTION_NAME_HERE.sln'
Start-Process $nugetexe -ArgumentList $args
中的构建中调用了这个powershell脚本
答案 27 :(得分:0)
对我来说,问题是NuGet无法自动获取/更新软件包,因为完整的文件路径太大了。 通过将我的解决方案移至我的文档中的文件夹而非深层嵌套文件夹来修复。
然后可以右键单击解决方案并选择“Restore NuGet Packages”(如果您只是构建它并且让它为您执行此操作可能没有必要),然后选择“Manage NuGet Packages for Solution”以获取所有软件包都更新到最新版本。
这是从微软网站下载的样本ASP MVC应用程序的解决方案。
答案 28 :(得分:0)
我知道这个问题很旧,但是今天我遇到了同样的情况,想为最近发现此问题的任何人付出2美分。我手动将ASP MVC项目移至解决方案的子文件夹中,然后使用Visual Studio 2017将其删除并重新读入解决方案,出现了上述错误。将“ lib”和“ packages”文件夹移动到与MVC项目相同的子文件夹的根目录中。
答案 29 :(得分:0)
当我将包文件夹与解决方案文件和项目文件夹一起复制时,我的工作正常。我只是没有从以前的地方复制包文件夹。
答案 30 :(得分:0)
对我来说,我的gitignore文件忽略了我的packages文件夹。以下gitignore行引起了问题-
**/packages/*
已删除,它恢复了我的包文件夹。希望这对其他人有帮助。
答案 31 :(得分:0)
在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" />
重建如果一切正常,则无需继续,否则 右键单击该项目,单击“卸载项目”&#39; 再次右键单击该项目并编辑.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')" />
答案 32 :(得分:0)
不确定这是否对任何人都有帮助,但是当我从本地计算机删除源代码而没有将解决方案文件保存到TFS时,我遇到了这个问题。 (在初始开发期间,我右键单击并在解决方案资源管理器中检查项目,但忘记检查解决方案本身。)当我需要再次处理此问题时,我在TFS中所拥有的只是.csproj文件,没有.sln文件。所以在VS中我做了一个文件 - &gt;源控制 - &gt;高级 - 从服务器打开并打开.csproj文件。从那里我做了一个Save All,它问我想要保存.sln文件的位置。我将此.sln文件保存到项目目录中,其他文件夹(App_Data,App_Start等),而不是顶级目录。我终于弄明白我需要将.sln文件从项目文件夹中保存到目录中,这样它就与项目文件夹处于同一级别。我的所有路径都已解决,我能够再次构建它。
答案 33 :(得分:0)
许多人建议删除<Target>
标记可能会使其可编译。但是,请注意,当您为测试项目执行此操作时,它会产生副作用。
编译时我遇到了与MSTest.TestAdapter
nuget包有关的错误。通过删除<Target>
代码解决了该问题。虽然它使构建成功,但测试方法变得无法发现。测试资源管理器不会列出该项目中的测试方法,并且运行测试或调试测试也不会起作用。
我在使用Visual Studio 2017
和.Net framework 4.7
时遇到过这种情况,在其他版本中很可能会发生这种情况
答案 34 :(得分:0)
对于DevOps /构建工程师,您可以针对受影响的SLN修复此运行nuget restore
,如果缺少SLN,则可以修改项目。我必须为我们所有的UWP项目进行CI / CD构建。
call "%VS140COMNTOOLS%VsDevCmd.bat"
call "%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\VsDevCmd.bat"
call nuget restore MyStuff.SLN
或call nuget restore MyStuff.csproj
。答案 35 :(得分:-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\Costura.Fody.2.0.1\build\Costura.Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Costura.Fody.2.0.1\build\Costura.Fody.targets'))" />
<Error Condition="!Exists('..\packages\Fody.3.1.3\build\Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Fody.3.1.3\build\Fody.targets'))" />