我有一个ASP。NET MVC5应用程序,昨天工作,现在我得到这个错误时,我试图构建:
该项目引用了这台计算机上缺少的NuGet包。
我已经检查了两个选项,允许nuget自动下载和安装丢失的包检查/打开。我还尝试删除packages文件夹中的所有文件,然后让nuget重新下载它们。另外,当我打开nuget并寻找更新时,它说没有需要安装的。我想不出还能做些什么来解决这个恼人的问题。
我还通过右键单击项目并选择该选项启用了nuget恢复。然后,它添加了一个nuget文件夹和该文件夹中的三个项目,但没有采取任何措施来解决问题。我已经尝试重新构建,但仍然得到相同的错误。
如果您正在使用TFS
删除NuGet.exe和NuGet。目标解决方案的.nuget文件夹中的文件。确保文件本身也从解决方案工作区中删除。
保留NuGet。配置文件继续绕过向源代码控制添加包。
编辑解决方案中的每个项目文件(例如,.csproj, .vbproj),并删除对NuGet的任何引用。目标文件。在您选择的编辑器中打开项目文件并删除以下设置:
<RestorePackages>true</RestorePackages>
...
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />
...
<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>
如果您不使用TFS
从解决方案中删除.nuget文件夹。确保文件夹本身也从解决方案工作区中删除。
编辑解决方案中的每个项目文件(例如,.csproj, .vbproj),并删除对NuGet的任何引用。目标文件。在您选择的编辑器中打开项目文件并删除以下设置:
<RestorePackages>true</RestorePackages>
...
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />
...
<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>
参考:迁移msbuild集成解决方案以使用自动包恢复
在我的例子中,它与Microsoft.Build.Bcl版本有关。
我的nuget包版本是1.0.21,但我的项目文件仍然指向1.0.14版本
所以我把我的。csproj文件从:
<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>
to:
<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="EnsureBclBuildImported" BeforeTargets="BeforeBuild" Condition="'$(BclBuildImported)' == ''">
<Error Condition="!Exists('..\..\packages\Microsoft.Bcl.Build.1.0.21\build\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.21\build\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" />
这个结构又开始工作了。
我也有同样的问题。我在复制现有项目并将其转移到解决方案目录的文件夹中,并将其作为现有项目添加到空解决方案时遇到了这种情况。所以我必须编辑我的csproj文件并寻找这一行特定的代码,大多数情况下,这可以在最后几行找到:
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
在这一行之后,我必须注释掉这些:
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.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\EntityFramework.6.4.0\build\EntityFramework.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\..\packages\EntityFramework.6.4.0\build\EntityFramework.props'))" />
<Error Condition="!Exists('..\..\..\..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets'))" />
</Target>
<Import Project="..\..\..\..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets" Condition="Exists('..\..\..\..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets')" />
您的解决方案将提示您的项目有更改,只需选择Reload All:
然后,在重新构建解决方案之后,一切都可以正常工作。
当我从公司得到一台新电脑,并试图用Git克隆它后构建项目时,我遇到了这个问题。问题是我的NuGet设置不包括一个远程存储库,从中获取包。根据NuGet.org的FAQ,我发现了这个:
我在我的存储库列表中没有看到nuget.org,我怎么把它找回来?
将https://api.nuget.org/v3/index.json添加到您的源列表中,或者
删除% appdata % \ .nuget \ NuGet。Config (Windows)或~/. NuGet/NuGet /NuGet。配置(Mac/Linux),让NuGet重新创建它。
在我的例子中,没有%appdata%\。nuget目录在我的机器上,所以从Visual Studio中,我遵循以下步骤来修复这个问题:
单击工具栏中的“工具> NuGet包管理器>包管理器设置”
在左侧列表中选择“NuGet Package Manager > Package Sources”
单击右上方的绿色+以添加一个新源
“Name: value”设置为“NuGet.org”
Source: value设置为https://api.nuget.org/v3/index.json
在那之后,NuGet能够下载它找不到的软件包。
为了消除构建中的错误,我执行了以下步骤:
删除解决方案中的bin和obj目录
单击工具栏中的Build > Rebuild Solution
一旦构建完成,错误就消失了。