我有一个ASP。NET MVC5应用程序,昨天工作,现在我得到这个错误时,我试图构建:
该项目引用了这台计算机上缺少的NuGet包。
我已经检查了两个选项,允许nuget自动下载和安装丢失的包检查/打开。我还尝试删除packages文件夹中的所有文件,然后让nuget重新下载它们。另外,当我打开nuget并寻找更新时,它说没有需要安装的。我想不出还能做些什么来解决这个恼人的问题。
我还通过右键单击项目并选择该选项启用了nuget恢复。然后,它添加了一个nuget文件夹和该文件夹中的三个项目,但没有采取任何措施来解决问题。我已经尝试重新构建,但仍然得到相同的错误。
编辑.sln和.csproj并不总是那么容易或理想。获得错误列表后,您可以看到哪些项目缺少包(而且,References节点通常指示有缺少程序集,除非包是源代码、资源、图像或只是基于文本的包)。
删除然后添加包不是一个好主意,除非您使用的是包的最新版本。否则,要准备好迎接意外,但不一定都是令人愉快的意外。
如果包是EntityFramework,那么从NuGet库中你可以得到最新的版本,在写这篇评论时它是6.1.3。
因此,处理这种情况最安全的方法可能是逐个恢复丢失的包。是的,一个有点痛苦的练习,但追逐细微的bug,由于不同的包版本可能更不愉快。
话虽如此,让EntityFramework再次成为缺失的包,你可以在包管理器控制台中发出以下命令:
PM> Install-Package EntityFramework -Version 6.0.1
这将安装正确的版本,即6.0.1,即packages.config中指定的版本:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="EntityFramework" version="6.0.1" targetFramework="net451" />
</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>
事实上,在这个代码片段中,您可以看到错误消息的来源。
我正在从msbuild集成包还原转换为自动包还原(https://learn.microsoft.com/en-us/nuget/consume-packages/package-restore#migrate-to-automatic-package-restore)
编辑.sln和.csproj并不总是那么容易或理想。获得错误列表后,您可以看到哪些项目缺少包(而且,References节点通常指示有缺少程序集,除非包是源代码、资源、图像或只是基于文本的包)。
删除然后添加包不是一个好主意,除非您使用的是包的最新版本。否则,要准备好迎接意外,但不一定都是令人愉快的意外。
如果包是EntityFramework,那么从NuGet库中你可以得到最新的版本,在写这篇评论时它是6.1.3。
因此,处理这种情况最安全的方法可能是逐个恢复丢失的包。是的,一个有点痛苦的练习,但追逐细微的bug,由于不同的包版本可能更不愉快。
话虽如此,让EntityFramework再次成为缺失的包,你可以在包管理器控制台中发出以下命令:
PM> Install-Package EntityFramework -Version 6.0.1
这将安装正确的版本,即6.0.1,即packages.config中指定的版本:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="EntityFramework" version="6.0.1" targetFramework="net451" />
</packages>
我也有同样的问题。我在复制现有项目并将其转移到解决方案目录的文件夹中,并将其作为现有项目添加到空解决方案时遇到了这种情况。所以我必须编辑我的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:
然后,在重新构建解决方案之后,一切都可以正常工作。