我在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
即使我编辑了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
仅在主控制台应用程序项目中安装Windows实施库NuGet程序包后,它才会开始构建而没有错误。
以下是主要和子模块解决方案,可快速重现错误: https://github.com/KulaGGin/VCPPConsoleApplicationSolution https://github.com/KulaGGin/LibrarySubmoduleSolution
答案 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软件包以自动包括库路径。