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

b1payxdu  于 2023-02-07  发布在  Git
关注(0)|答案(2)|浏览(282)

我在Visual Studio中的Git下有一个C++控制台应用程序,其中有一个名为LibrarySubmoduleSolution的子模块静态库,这个LibrarySubmoduleSolution使用Windows实现库NuGet包。
在我的VCPPConsoleApplicationSolution主解决方案中下载Git子模块并在解决方案中恢复NuGet包后,我收到以下错误:
严重程度代码说明项目文件行
隐藏状态错误此项目引用了此计算机上缺少的NuGet包。请使用NuGet包还原来下载这些包。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件为..\packages\Microsoft. Windows.实现库. 1. 0. 200519. 2\build\native\Microsoft. Windows.实现库. targets.库子模块解决方案
D:\项目\测试\VCPP控制台应用程序解决方案\库中子模块解决方案\库中子模块解决方案\库中子模块解决方案. vcxproj 166严重性代码描述项目文件行
隐藏状态错误C1083无法打开包含文件:"wil/资源. h":无此文件或目录
VCPP控制台应用程序解决方案
D:\项目\测试\VCPP控制台应用程序解决方案\库中子模块解决方案\库中子模块解决方案\某类. h 3

我在谷歌上搜索答案,在这里Stackoverflow,甚至在我编辑我的LibrarySubmoduleSolution.vcxproj文件并将packages文件夹从..\packages更改为$(SolutionDir)\packages后:

<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/资源. h":没有这样的文件或目录VCPP控制台应用程序解决方案D:\项目\测试\VCPP控制台应用程序解决方案\库中子模块解决方案\库中子模块解决方案\某个类. h 3

只有当我在我的主控制台应用程序项目中安装Windows实现库NuGet包后,它才开始构建,没有错误。
以下是快速重现错误的主要模块和子模块解决方案:https://github.com/KulaGGin/VCPPConsoleApplicationSolutionhttps://github.com/KulaGGin/LibrarySubmoduleSolution

5w9g7ksd

5w9g7ksd1#

如何修复丢失NuGet包的错误?
我从github下载了你的项目,遇到了和你描述的一样的问题。
主要问题是您的Nuget包已经损坏,或者您的项目引用Nuget包时出现问题。
请按照以下步骤操作,我通过这些步骤解决了问题。

    • 建议**
    • 1)**清除所有nuget缓存或仅删除C:\Users\xxx(current user name)\.nuget\packages下的所有文件
    • 2)**关闭VS示例,删除解决方案文件夹下的.vs隐藏文件夹和任何输出文件夹(如x64文件夹)
    • 3)工具**--〉Nuget软件包管理器--〉软件包管理器控制台下运行命令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并使用了它的文件,那么您还应该在主项目中包含这样的库路径,否则它在主项目VCPPConsoleApplicationSolution中找不到resource.h
    • 实际上**,当您从主项目VCPPConsoleApplicationSolution中的LibrarySubmoduleSolution引用someclass.h时,someclass.h文件将被复制到VCPPConsoleApplicationSolution中,在这种环境中,您在LibrarySubmoduleSolution中安装wil/resource.h库时,没有wil/resource.h库。在主项目中,它没有安装nuget包(自动包含resource.h所在位置include路径),因此将发生错误。
    • 作为建议**,

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

    • 或者**在主项目中安装nuget包以自动包含库路径。
n9vozmp4

n9vozmp42#

有时,Visual Studio可能会悄悄地进入脑死亡状态,并锁定项目或工具,这可以防止"自动"恢复发生。
在这些情况下,最好:
1.关闭Visual Studio
1.对项目/解决方案进行全面清理
1.检查任务管理器中是否有VS(即testhost.exe)中可能仍在运行的任何错误进程,并将其杀死。
1.重新启动Visual Studio并加载项目,然后重试
那么,自动软件包恢复应该会发生。

相关问题