我有一个ASP。NET MVC5应用程序,昨天工作,现在我得到这个错误时,我试图构建:
该项目引用了这台计算机上缺少的NuGet包。
我已经检查了两个选项,允许nuget自动下载和安装丢失的包检查/打开。我还尝试删除packages文件夹中的所有文件,然后让nuget重新下载它们。另外,当我打开nuget并寻找更新时,它说没有需要安装的。我想不出还能做些什么来解决这个恼人的问题。
我还通过右键单击项目并选择该选项启用了nuget恢复。然后,它添加了一个nuget文件夹和该文件夹中的三个项目,但没有采取任何措施来解决问题。我已经尝试重新构建,但仍然得到相同的错误。
在我的情况下,我必须从.csproj文件中删除以下内容:
<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. 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集成包还原转换为自动包还原(https://learn.microsoft.com/en-us/nuget/consume-packages/package-restore#migrate-to-automatic-package-restore)
以我为例,我把我的解决方案文件夹从一个位置移动到另一个位置,重新组织了一下,在这个过程中,它的相对文件夹结构发生了变化。
因此,我必须编辑我的.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')" />
to
<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')" />
(注意从..\packages\到packages\。在你的情况下,它可能是一个不同的相对结构,但你懂的。)
一种解决方案是从.csproj文件中删除以下内容:
<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. 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>
How?
右键单击项目。卸载项目。
右键单击项目。编辑csproj。
从文件中删除该部件。保存。
右键单击项目。重新加载项目。
当我从公司得到一台新电脑,并试图用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
一旦构建完成,错误就消失了。
在我的例子中,它与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" />
这个结构又开始工作了。