此项目引用此计算机上缺少的 NuGet 包

Posted

技术标签:

【中文标题】此项目引用此计算机上缺少的 NuGet 包【英文标题】:This project references NuGet package(s) that are missing on this computer 【发布时间】:2014-05-19 12:34:48 【问题描述】:

我有一个昨天工作的 ASP.NET MVC5 应用程序,现在我在尝试构建时遇到此错误:

我选中了两个选项,允许 nuget 自动下载和安装丢失的软件包,选中/打开。我还尝试删除包文件夹中的所有文件,然后让 nuget 重新下载它们。此外,当我打开 nuget 并查找更新时,它说不需要安装任何更新。我想不出还能做些什么来解决这个令人惊讶的烦人问题。

我还通过右键单击项目并选择该选项来启用 nuget 恢复。然后它在该文件夹中添加了一个 nuget 文件夹和三个项目,但没有解决问题。我已经尝试重新构建,但仍然遇到同样的错误。

【问题讨论】:

您的解决方案是否包含 .nuget 文件夹并且您是否已将 NuGet 更新到最新版本?见这里:***.com/questions/18833649/… 是的,试过了,但没有解决我的构建错误消息问题。 此错误的另一个原因是The operation has timed out. 错误。在构建过程中。您需要检查构建日志或 Visual Studio Online Build Failed 信息屏幕中的 Diagnostics 选项卡。 没有一个解决方案适合我。我正在从 repo 下载,并且包恢复为第一个项目的正确文件结构,第二个项目找不到它们。检查 .csproj 表明正在使用正确的相对路径,因此我无法尝试解决此问题。 github.com/DanJ210/ProgrammersTest 这发生在我升级扩展版本时(右键单击项目,管理 NuGet 包,升级)。 Visual Studio 忘记删除对旧版本的引用并为新版本添加了引用。手动编辑项目文件并删除过时的引用(有 2 个!)是修复。 【参考方案1】:

就我而言,我必须从 .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>

其实在这个sn-p中你可以看到错误信息是从哪里来的。

我正在从 MSBuild-Integrated Package Restore 转换为 Automatic Package Restore (http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore)

【讨论】:

这对我有用,但我只需要删除 元素。如果我也删除了 元素,VS[2013] 似乎可以恢复它。 这真是难以置信。为什么微软让一切变得如此困难? 如果这个可以去掉,为什么一开始就在那里? OK9999,在某一时刻,您必须从早期版本的 Visual Studio 中启用它,方法是右键单击解决方案并选择“启用 NuGet 包还原”,以旧方式进行。我们不再需要它了 我喜欢只涉及删除内容的解决方案。【参考方案2】:

一种解决方案是从 .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>

怎么做?

    右键单击项目。卸载项目。 右键单击项目。编辑 csproj。 从文件中删除部件。保存。 右键单击项目。重新加载项目。

【讨论】:

当您将项目从一个地方移动到另一个地方时,效果很好。 @ClintEastwood 我的回答解释了 如何 做到这一点。这就是区别。如果用户正在寻找 HOW TO 我的答案,与上面的答案相反。 @IvanSantiago 您可以:将其添加为评论,或者使用操作方法编辑原始答案。【参考方案3】:

在我的情况下,它发生在我将解决方案文件夹从一个位置移动到另一个位置,对其进行了一些重新组织,并且在此过程中其相对文件夹结构发生了变化。

所以我不得不在我的.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\ 的变化。在您的情况下,它可能是不同的相对结构,但您明白了。) p>

【讨论】:

类似问题....我已将 .csproj 文件在目录结构中上移一级,必须从“..\..\packages\...”更改为“.. \packages\..."。 我遇到了类似的问题,但真的很奇怪。我在子解决方案模块中使用它,所以在那个解决方案中它很好,但是当我从另一个解决方案中引用那个解决方案时,包在不同的地方。我在整个 .csproj 中将 ..\packages 更改为 $(SolutionDir)packages 并修复了它。 如果您不想手动处理 .csproj 文件,我发现记下您为项目安装的所有 nuget 包,删除它们并重新安装它们解决了这个问题对我来说问题。当我遇到这个问题时,我正试图从解决方案中删除一个项目以放入它自己的 git 存储库中。 这是否意味着您的 .csproj 与您的 .sln 文件处于同一级别? @Simon_Weaver 在这种情况下,您的.csproj 相对于您的.sln 的位置并不重要。重要的是您的.csproj 中引用的任何内容是否已移动到其他地方。如果是这样,那么您需要修复它。如果您将“.csproj”及其引用的所有内容原封不动地移动了,但将 .sln 保留在原处,那么您必须将 .sln 文件修复到 .csproj-es 的新位置,但是那里将无需编辑.csproj 文件。【参考方案4】:

我可以通过右键单击我的解决方案,然后单击启用 NuGet 包还原选项轻松解决此问题

(P.S:确保您有 Nuget Install From Tools--> Extensions and Update--> Nuget Package Manager for Visual Studio 2013。如果没有先安装此扩展)

希望对你有帮助。

【讨论】:

这是恢复 nuget 包的旧方法,应该避免。 @TheMuffinMan:您能否澄清一下新方法是什么以及为什么应该避免这种方法(考虑到 VS 2013 错误输出告诉您应该这样做)? @CantrianBear 导航到此页面docs.nuget.org/consume/package-restore 并找到名为MSBuild-Integrated Package Restore 的部分。这是旧方法,它列出了您应该使用新方法的一些原因。 在 blog.davidebbo.com/2014/01/… 上查看 David Ebbo 的博客现在...“NuGet 现在总是在构建 VS 之前恢复包。”【参考方案5】:

就我而言,它与 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" />

构建又开始工作了。

【讨论】:

【参考方案6】:

我也有同样的问题。当我复制一个现有项目并将其转移到我的解决方案目录的文件夹中并将其作为现有项目添加到我的空解决方案中时,我遇到了它。所以我必须编辑我的 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:

然后在重建我的解决方案后一切正常。

【讨论】:

【参考方案7】:

如果您使用的是 TFS

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

编辑解决方案中的每个项目文件(例如 .csproj、.vbproj)并删除对 NuGet.targets 文件的所有引用。在您选择的编辑器中打开项目文件并删除以下设置:

<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.targets 文件的任何引用。在您选择的编辑器中打开项目文件并删除以下设置:

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

参考:Migrating MSBuild-Integrated solutions to use Automatic Package Restore

【讨论】:

【参考方案8】:

删除 .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>

【讨论】:

【参考方案9】:

是否有可能将软件包恢复到错误的文件夹?检查 csproj 文件中的路径是否正确。

如果它们不同,则可能是由于现在将软件包恢复到不同的位置。这可能是由于在指定这样的节点时检查了 NuGet.Config 文件:

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

正在恢复包,项目仍在查看旧位置。

【讨论】:

我相信这可能是路径问题,因为我确实移动了文件的位置,但我看不到任何地方都有硬编码路径。我查看了 proj 文件,所有包文件似乎都是这样的:False ..\packages\Antlr.3.5.0.2\lib\Antlr3.Runtime.dll 将此添加到 web.config 没有帮助: 您不想将其添加到 web.config。我指的是 NuGet.config 文件,您想检查相对路径。您的软件包相对于 csproj 文件在哪里?它们在 ..\packages 中吗?听起来包正在正确恢复,但您的项目在错误的位置。 我找不到 nuget.config 文件【参考方案10】:

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

【讨论】:

这对我也有用——但我不知道是否正确的做法是安装该软件包(它与下面的 henkie14 的版本更改答案具有相同的效果,或者只是删除所有这些目标——是他们实际上做了什么有用的事情? 1.0.21版本包中没有文件,安装1.0.14版本解决了这个问题。【参考方案11】:

一种解决方案是从 .csproj 文件中删除以下内容:

<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />

此项目引用此计算机上缺少的 NuGet 包。启用 NuGet 包还原以下载它们。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkID=322105。丢失的文件是 0。

【讨论】:

【参考方案12】:

首先要尝试的是右键单击解决方案并选择“恢复 Nuget 包”。

在我的情况下这不起作用,所以我遵循了一些关于删除项目文件中的“导入”和“目标”的建议,这适用于我的 3 个项目中的 2 个,但在最后一个项目中出现了不同的错误。

打开包管理器控制台并运行:

Update-Package -reinstall -ProjectName MyProjectName

这需要一些时间,但由于它重新安装所有包,您的项目将毫无问题地编译

【讨论】:

【参考方案13】:

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

要将 nuget 包添加到您的解决方案中:

    右键单击要引用nuget的项目(不是解决方案) 包。 选择:管理 nuget 包 在弹出窗口的左侧,您有三个选择。 如果您选择 Online > Microsoft & .NET,您将能够安装 Microsoft ASP.NET Web API 2.2 包分组器(或任何包 你需要 - 我的是这个)。 现在右键单击您的解决方案(不是项目)并选择 启用 nuget 包恢复。这将导致包在编译时自动下载。

【讨论】:

我所要做的就是为解决方案启用块包恢复。显然其他一切都已正确设置。【参考方案14】:

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

【讨论】:

【参考方案15】:

当我从公司获得一台新计算机并尝试在使用 Git 克隆项目后构建项目时,我遇到了这个问题。问题是我的 NuGet 设置不包括从中获取包的远程存储库。 Following the FAQ at NuGet.org,我发现了这个:

我没有在我的存储库列表中看到 nuget.org,我该如何取回它?

https://api.nuget.org/v3/index.json 添加到您的来源列表中,或者 删除 %appdata%\.nuget\NuGet.Config (Windows) 或 ~/.nuget/NuGet/NuGet.Config (Mac/Linux) 并让 NuGet 重新创建它。

在我的情况下,我的机器上根本没有 %appdata%\.nuget 目录,所以在 Visual Studio 中,我按照以下步骤解决了这个问题:

    点击工具栏中的Tools > NuGet Package Manager > Package Manager Settings 从左侧列表中选择NuGet Package Manager > Package Sources 点击右上角的绿色+ 添加新来源 将Name: 值设置为NuGet.orgSource: 值设置为https://api.nuget.org/v3/index.json

之后,NuGet 能够下载它找不到的包。

为了消除构建中的错误,我执行了以下步骤:

    删除解决方案中的binobj目录 点击工具栏中的Build > Rebuild Solution

构建完成后,错误就消失了。

【讨论】:

【参考方案16】:

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

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

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

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

【讨论】:

【参考方案17】:

编辑 .sln 和 .csproj 并不总是那么容易或理想。获得错误列表后,您可以查看哪些项目缺少包(此外,References 节点通常指示缺少程序集,除非包是源代码、资源、图像或只是基于文本的包)。

除非您使用最新版本的软件包,否则删除然后添加软件包不是一个好主意。否则要为惊喜做好准备,而不是总是令人愉快的。

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

所以,处理这种情况的最安全的方法可能是一个一个恢复丢失的包。是的,有点痛苦的练习,但由于不同的包版本而追逐细微的错误可能会更不愉快。

话虽如此,让 EntityFramework 再次成为丢失的包,您可以在 Package-Manager 控制台中发出以下命令:

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>

【讨论】:

【参考方案18】:

当 csproj 和 sln 文件在同一个文件夹中时,我遇到了这个问题(愚蠢,我知道)。一旦我将 sln 文件移动到 csproj 文件夹上方的文件夹中,我的 so

【讨论】:

【参考方案19】:

我遇到了同样的错误,但在我的情况下,它根本与 nuget 包无关。 我的解决方案的项目引用了不属于我的解决方案且未构建的其他项目。在使用其他解决方案构建它们之后(或者我也可以将它们包含在我的解决方案中),然后在 Visual Studio 中重新打开我的解决方案,问题就解决了。

【讨论】:

【参考方案20】:

我在解决方案根文件夹中创建了一个名为“.nuget”的文件夹 然后在此文件夹中添加文件“NuGet.Config”,内容如下

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

然后创建文件 '.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>

【讨论】:

以上是关于此项目引用此计算机上缺少的 NuGet 包的主要内容,如果未能解决你的问题,请参考以下文章

这台计算机上缺少此项目引用的Nuget程序包,请参考链接 不给出缺什么包的提示。

这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包

NuGet 引用存储在哪里?

NuGet参考存储在哪里?

Nuget表示缺少软件包,Package Manager Restore表示已安装所有软件包

构建错误,此项目引用 NuGet