如何解决丢失的NuGet软件包错误?

时间:2020-07-16 13:47:00

标签: git visual-studio nuget nuget-package nuget-package-restore

我在Visual Studio中的Git下有一个C ++控制台应用程序,其中有一个名为LibrarySubmoduleSolution的子模块静态库。 LibrarySubmoduleSolution使用Windows实施库NuGet程序包。

在我的VCPPConsoleApplicationSolution主要解决方案中下载Git子模块并还原该解决方案中的NuGet软件包后,出现以下错误:

严重性代码描述项目文件行
抑制状态错误该项目引用了NuGet 此计算机上缺少的软件包。使用NuGet软件包 恢复以下载它们。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。丢失的文件是 .. \ packages \ Microsoft.Windows.ImplementationLibrary.1.0.200519.2 \ build \ native \ Microsoft.Windows.ImplementationLibrary.targets。 LibrarySubmoduleSolution
D:\ Projects \ Tests \ VCPPConsoleApplicationSolution \ LibrarySubmoduleSolution \ LibrarySubmoduleSolution \ LibrarySubmoduleSolution.vcxproj 166严重性代码描述项目文件行
抑制状态错误C1083无法打开包含文件: 'wil / resource.h':没有这样的文件或目录
VCPPConsoleApplicationSolution
D:\ Projects \ Tests \ VCPPConsoleApplicationSolution \ LibrarySubmoduleSolution \ LibrarySubmoduleSolution \ SomeClass.h 3 enter image description here

即使我编辑了LibrarySubmoduleSolution.vcxproj文件并将packages文件夹从..\packages更改为$(SolutionDir)\packages,我还是在Google和Stackoverflow上搜索了答案:

  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <ImportGroup Label="ExtensionTargets">
    <Import Project="$(SolutionDir)\packages\Microsoft.Windows.ImplementationLibrary.1.0.200519.2\build\native\Microsoft.Windows.ImplementationLibrary.targets" Condition="Exists('$(SolutionDir)\packages\Microsoft.Windows.ImplementationLibrary.1.0.200519.2\build\native\Microsoft.Windows.ImplementationLibrary.targets')" />
  </ImportGroup>
  <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('$(SolutionDir)\packages\Microsoft.Windows.ImplementationLibrary.1.0.200519.2\build\native\Microsoft.Windows.ImplementationLibrary.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\packages\Microsoft.Windows.ImplementationLibrary.1.0.200519.2\build\native\Microsoft.Windows.ImplementationLibrary.targets'))" />
  </Target>

我仍然无法创建该错误:

严重性代码描述项目文件行抑制状态 错误C1083无法打开包含文件:“ wil / resource.h”:没有此类文件 要么 目录VCPPConsoleApplicationSolution D:\ Projects \ Tests \ VCPPConsoleApplicationSolution \ LibrarySubmoduleSolution \ LibrarySubmoduleSolution \ SomeClass.h 3 enter image description here

仅在主控制台应用程序项目中安装Windows实施库NuGet程序包后,它才会开始构建而没有错误。

以下是主要和子模块解决方案,可快速重现错误: https://github.com/KulaGGin/VCPPConsoleApplicationSolution https://github.com/KulaGGin/LibrarySubmoduleSolution

1 个答案:

答案 0 :(得分:1)

如何修复丢失的NuGet软件包错误?

我从github下载了您的项目,并遇到了与您描述的相同的问题。

主要问题是您的nuget软件包已损坏,或者您的项目引用Nuget软件包存在问题。

请按照以下步骤操作,我通过它们解决了问题。

建议

1) clean all nuget caches或只删除C:\Users\xxx(current user name)\.nuget\packages下的所有文件

2)关闭VS实例,删除解决方案文件夹下的.vs隐藏文件夹以及任何输出文件夹,例如x64文件夹

3)工具-> Nuget Package Manager -> Package Manager下运行命令update-package -reinstall控制台,将其重新安装到您的项目中。

然后,该错误将消失。我遵循了这些,终于明白了。

更新1

===========================

很抱歉,没有详细观察您的问题。问题出在xxx.vcxproj文件中。

问题出在以下地方:

<Error Condition="!Exists('$(SolutionDir)\packages\Microsoft.Windows.ImplementationLibrary.1.0.200519.2\build\native\Microsoft.Windows.ImplementationLibrary.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\packages\Microsoft.Windows.ImplementationLibrary.1.0.200519.2\build\native\Microsoft.Windows.ImplementationLibrary.targets'))" />

 <Import Project="$(SolutionDir)\packages\Microsoft.Windows.ImplementationLibrary.1.0.200519.2\build\native\Microsoft.Windows.ImplementationLibrary.targets" Condition="Exists('$(SolutionDir)\packages\Microsoft.Windows.ImplementationLibrary.1.0.200519.2\build\native\Microsoft.Windows.ImplementationLibrary.targets')" />

我想知道为什么要使用$(SolutionDir)而不是..

在您的问题中$(SolutionDir)\packages的意思是xxx(SolutionName)\\packages

$(SolutonDir)的意思是xxxx\LibrarySubmoduleSolution\,它已经包含\

解决方案

请删除\$(SolutionDir)之间的packages并更改为:

$(SolutionDir)packages\Microsoft.Windows.ImplementationLibrary.1.0.200519.2\build\native\Microsoft.Windows.ImplementationLibrary.targets在两个xml节点中。

=============================

更新2

此外,如果您的主项目VCPPConsoleApplicationSolution引用了LibrarySubmoduleSolution并使用了其文件,则您还应在主项目中包含此类库路径,否则,它将找不到主项目resource.h中的VCPPConsoleApplicationSolution

实际上,当您在主项目someclass.h中引用LibrarySubmoduleSolution中的VCPPConsoleApplicationSolution时,someclass.h文件将被复制到{{ 1}},在这样的环境中,当您将其安装在VCPPConsoleApplicationSolution中时,就没有这样的库wil/resource.h。在主项目中,它没有安装该nuget软件包(以自动包含包含路径LibrarySubmoduleSolution的包含路径),因此会发生错误。

作为建议

您可以右键单击resource.h属性-> VCPPConsoleApplicationSolution->将VC++ Dirctories添加到xxxx\VCPPConsoleApplicationSolution\packages\Microsoft.Windows.ImplementationLibrary.1.0.200519.2\include中。

在主项目中安装该nuget软件包以自动包括库路径。