此项目引用了此计算机上缺less的NuGet程序包

我有一个ASP.NET MVC5应用程序昨天工作,现在我得到这个错误,当我尝试构build:

这个项目引用了这台计算机上缺less的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集成软件包还原自动软件包还原http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore

一个解决scheme是从.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> 

怎么样?

  1. 右键点击项目。 卸载项目。
  2. 右键点击项目。 编辑csproj。
  3. 从文件中删除部分。 保存。
  4. 右键点击项目。 重新加载项目。

在我的情况下,它发生在我的解决scheme文件夹从一个位置移动到另一个位置之后,重新组织了一下,并在这个过程中改变了它的相关文件夹结构。

所以我不得不在我的.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')" /> 

  <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\的变化,在你的情况下可能是一个不同的相对结构,但是你明白了)

右键单击我的解决scheme,然后单击“ 启用NuGet包恢复”选项,即可轻松解决此问题

(PS:确保您具有从工具的Nuget安装 – >扩展和更新 – >用于Visual Studio 2013的Nuget包pipe理器。如果不先安装此扩展)

希望能帮助到你。

在我的情况下,它必须与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> 

至:

  <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" /> 

build设再次工作。

如果你正在使用TFS

从解决scheme的.nuget文件夹中删除NuGet.exeNuGet.targets文件。 确保文件本身也从解决scheme工作区中删除。 保留NuGet.Config文件继续绕过添加包到源代码pipe理。

编辑解决scheme中的每个项目文件(例如,.csproj,.vbproj),并删除对NuGet.targets文件的任何引用。 在您select的编辑器中打开项目文件并删除以下设置:

 <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

从解决scheme中删除.nuget文件夹。 确保文件夹本身也从解决scheme工作区中删除。

编辑解决scheme中的每个项目文件(例如,.csproj,.vbproj),并删除对NuGet.targets文件的任何引用。 在您select的编辑器中打开项目文件并删除以下设置:

 <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集成解决scheme以使用自动包还原

我遇到过同样的问题。 在我的情况下安装Microsoft.Bcl.Build包解决了这个问题。

包是否已被恢复到错误的文件夹? 检查csproj文件中的path是否正确。

如果它们不同,则可能是由于软件包正在恢复到不同的位置而导致的。 这可能是由一个NuGet.Config文件在指定一个节点时被检查到的:

 <add key="repositoryPath" value="..\..\Packages" /> 

包裹正在恢复,由项目仍在看旧的位置。

这些是我用来解决问题的步骤:

要添加nuget包到您的解决scheme:

  1. 右键点击你想引用nuget包的项目(不是解决scheme)。
  2. select:pipe理nuget包
  3. 在popup的窗口中,左边有三个选项。 如果你select在线>微软和.NET ,你将能够安装Microsoft ASP.NET Web API 2.2包石斑鱼(或任何你需要的包 – 我的是这个)。
  4. 现在右键单击您的解决scheme(不是项目),然后select启用nuget包恢复 。 这将导致软件包在编译时被自动下载。

当我将类库引用到我的MVC Web应用程序中时,我遇到了同样的问题,

问题是两个项目之间的nuget软件包版本号不匹配。

例如:我的类库有1.2.3的log4net,但是我的webapp有1.2.6

修复:只要确保项目有相同的版本号引用。

我完全不知道是什么导致了这个错误。 简单地closures和重新开放的视觉工作室停止了这个构build错误。

编辑.sln和.csproj并不总是那么容易或不可取。 一旦你得到了错误列表,你可以看到哪些项目缺less包(也是,除非包是源代码,资源,图像,或只是基于文本的,否则“引用”节点通常表示缺less程序集)。

除非您使用最新版本的软件包,否则删除并添加软件包不是一个好主意。 否则,准备惊喜,不总是愉快的。

如果说包是EntityFramework,那么从NuGet库中获得最新版本,在撰写本评论时它是6.1.3

所以,处理这种情况的最安全的办法就是一个接一个地恢复丢失的包裹。 是的,有点痛苦的练习,但是由于不同的包装版本而追求细微的错误可能会更令人不快。

说完这一点,让EntityFramework再次成为缺less的软件包,您可以在软件包pipe理器控制台中发出以下命令:

 PM> Install-Package EntityFramework -Version 6.0.1 

这将安装正确的版本,即在packages.config中指定的版本,即6.0.1

  <?xml version="1.0" encoding="utf-8"?> <packages> <package id="EntityFramework" version="6.0.1" targetFramework="net451" /> </packages> 

对我来说,它工作,我只是从一个工作的解决scheme复制一个.nuget文件夹到现有的,并引用它的内容!

当您尝试从您的项目中删除postsharp时,可能会发生这种情况。

确保你删除线路罗伦说。

我在解决scheme根文件夹中创build了一个名为“.nuget”的文件夹,然后在这个文件夹中添加文件“NuGet.Config”

 <?xml version="1.0" encoding="utf-8"?> <configuration> <solution> <add key="disableSourceControlIntegration" value="true" /> </solution> </configuration> 

然后创build文件'.nuGet.targets'$(MSBuildProjectDirectory).. \

  <!-- Enable the restore command to run before builds --> <RestorePackages Condition=" '$(RestorePackages)' == '' ">false</RestorePackages> <!-- Property that enables building a package from a project --> <BuildPackage Condition=" '$(BuildPackage)' == '' ">false</BuildPackage> <!-- Determines if package restore consent is required to restore packages --> <RequireRestoreConsent Condition=" '$(RequireRestoreConsent)' != 'false' ">true</RequireRestoreConsent> <!-- Download NuGet.exe if it does not already exist --> <DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">false</DownloadNuGetExe> </PropertyGroup> <ItemGroup Condition=" '$(PackageSources)' == '' "> <!-- Package sources used to restore packages. By default will used the registered sources under %APPDATA%\NuGet\NuGet.Config --> <!-- <PackageSource Include="https://nuget.org/api/v2/" /> <PackageSource Include="https://my-nuget-source/nuget/" /> --> </ItemGroup> <PropertyGroup Condition=" '$(OS)' == 'Windows_NT'"> <!-- Windows specific commands --> <NuGetToolsPath>$([System.IO.Path]::Combine($(SolutionDir), ".nuget"))</NuGetToolsPath> <PackagesConfig>$([System.IO.Path]::Combine($(ProjectDir), "packages.config"))</PackagesConfig> <PackagesDir>$([System.IO.Path]::Combine($(SolutionDir), "packages"))</PackagesDir> </PropertyGroup> <PropertyGroup Condition=" '$(OS)' != 'Windows_NT'"> <!-- We need to launch nuget.exe with the mono command if we're not on windows --> <NuGetToolsPath>$(SolutionDir).nuget</NuGetToolsPath> <PackagesConfig>packages.config</PackagesConfig> <PackagesDir>$(SolutionDir)packages</PackagesDir> </PropertyGroup> <PropertyGroup> <!-- NuGet command --> <NuGetExePath Condition=" '$(NuGetExePath)' == '' ">$(NuGetToolsPath)\nuget.exe</NuGetExePath> <PackageSources Condition=" $(PackageSources) == '' ">@(PackageSource)</PackageSources> <NuGetCommand Condition=" '$(OS)' == 'Windows_NT'">"$(NuGetExePath)"</NuGetCommand> <NuGetCommand Condition=" '$(OS)' != 'Windows_NT' ">mono --runtime=v4.0.30319 $(NuGetExePath)</NuGetCommand> <PackageOutputDir Condition="$(PackageOutputDir) == ''">$(TargetDir.Trim('\\'))</PackageOutputDir> <RequireConsentSwitch Condition=" $(RequireRestoreConsent) == 'true' ">-RequireConsent</RequireConsentSwitch> <!-- Commands --> <RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(RequireConsentSwitch) -o "$(PackagesDir)"</RestoreCommand> <BuildCommand>$(NuGetCommand) pack "$(ProjectPath)" -p Configuration=$(Configuration) -o "$(PackageOutputDir)" -symbols</BuildCommand> <!-- Make the build depend on restore packages --> <BuildDependsOn Condition="$(RestorePackages) == 'true'"> RestorePackages; $(BuildDependsOn); </BuildDependsOn> <!-- Make the build depend on restore packages --> <BuildDependsOn Condition="$(BuildPackage) == 'true'"> $(BuildDependsOn); BuildPackage; </BuildDependsOn> </PropertyGroup> <Target Name="CheckPrerequisites"> <!-- Raise an error if we're unable to locate nuget.exe --> <Error Condition="'$(DownloadNuGetExe)' != 'true' AND !Exists('$(NuGetExePath)')" Text="Unable to locate '$(NuGetExePath)'" /> <SetEnvironmentVariable EnvKey="VisualStudioVersion" EnvValue="$(VisualStudioVersion)" Condition=" '$(VisualStudioVersion)' != '' AND '$(OS)' == 'Windows_NT' " /> <DownloadNuGet OutputFilename="$(NuGetExePath)" Condition=" '$(DownloadNuGetExe)' == 'true' AND !Exists('$(NuGetExePath)')" /> </Target> <Target Name="RestorePackages" DependsOnTargets="CheckPrerequisites"> <Exec Command="$(RestoreCommand)" Condition="'$(OS)' != 'Windows_NT' And Exists('$(PackagesConfig)')" /> <Exec Command="$(RestoreCommand)" LogStandardErrorAsError="true" Condition="'$(OS)' == 'Windows_NT' And Exists('$(PackagesConfig)')" /> </Target> <Target Name="BuildPackage" DependsOnTargets="CheckPrerequisites"> <Exec Command="$(BuildCommand)" Condition=" '$(OS)' != 'Windows_NT' " /> <Exec Command="$(BuildCommand)" LogStandardErrorAsError="true" Condition=" '$(OS)' == 'Windows_NT' " /> </Target> <UsingTask TaskName="DownloadNuGet" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll"> <ParameterGroup> <OutputFilename ParameterType="System.String" Required="true" /> </ParameterGroup> <Task> <Reference Include="System.Core" /> <Using Namespace="System" /> <Using Namespace="System.IO" /> <Using Namespace="System.Net" /> <Using Namespace="Microsoft.Build.Framework" /> <Using Namespace="Microsoft.Build.Utilities" /> <Code Type="Fragment" Language="cs"> <![CDATA[ try { OutputFilename = Path.GetFullPath(OutputFilename); Log.LogMessage("Downloading latest version of NuGet.exe..."); WebClient webClient = new WebClient(); webClient.DownloadFile("https://nuget.org/nuget.exe", OutputFilename); return true; } catch (Exception ex) { Log.LogErrorFromException(ex); return false; } ]]> </Code> </Task> </UsingTask> <UsingTask TaskName="SetEnvironmentVariable" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll"> <ParameterGroup> <EnvKey ParameterType="System.String" Required="true" /> <EnvValue ParameterType="System.String" Required="true" /> </ParameterGroup> <Task> <Using Namespace="System" /> <Code Type="Fragment" Language="cs"> <![CDATA[ try { Environment.SetEnvironmentVariable(EnvKey, EnvValue, System.EnvironmentVariableTarget.Process); } catch { } ]]> </Code> </Task> </UsingTask>