如何解决如何避免在引用另一个使用 NuGet 包的项目的 Visual Studio C++ 项目中安装相同的 NuGet 包?
假设我有一个带有 WilUniqueHandleClass 的 LibProject。该项目还安装了 WIL NuGet 包,在 WilUniqueHandleClass 的标头中包含 WIL 的标头 #include <wil/resource.h>
并具有来自该标头的公共字段:
LibProject 本身构建得很好。
然后我把这个项目添加到解决方案中的main(.exe类型)项目中。我在 VisualStudioNugetTestProject 中添加对 LibProject 的引用,并使用 $(SolutionDir)LibProject
在 VisualStudioNugetTestProject 中包含 LibProject 的主目录。然后我在 VisualStudioNugetTestProject.cpp 中包含 #include "WilUniqueHandleClass.h"
标头。然后我尝试构建并得到这些错误:
严重代码描述项目文件行抑制状态错误
(active) E1696 无法打开源文件
"wil/resource.h" VisualStudioNugetTestProject D:\Projects\Tests\VisualStudioNugetTestSolution\LibProject\WilUniqueHandleClass.h 3
错误 C1083 无法打开包含文件:'wil/resource.h':没有这样的文件
要么
目录 VisualStudioNugetTestProject D:\Projects\Tests\VisualStudioNugetTestSolution\LibProject\WilUniqueHandleClass.h 3
在主 .exe 项目中安装 WIL Nuget 包后,它构建得很好。
它需要工作的包含在 $(SolutionDir)packages\Microsoft.Windows.ImplementationLibrary.1.0.201120.3\build\native\Microsoft.Windows.ImplementationLibrary.targets
文件中,如下所示:
<?xml version="1.0"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>$(MSBuildThisFileDirectory)..\..\include\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
</ItemDefinitionGroup>
</Project>
我可以在主 .exe 项目中手动包含此目录:$(SolutionDir)packages\Microsoft.Windows.ImplementationLibrary.1.0.201120.3\include
:
但是在我更新 lib 项目上的 NuGet 包后,这将停止工作,显然,因为路径是硬编码的。
我觉得有两种方法可以解决这个问题:在主项目上安装 NuGet 包并在主项目上手动包含包含目录是 hacky 解决方法,而不是正确的解决方案。
有没有办法让主项目包含从另一个 lib 项目构建所需的所有包含,这样我就可以引用另一个项目并构建,而不必每次都修改这些东西?
这里是问题解决方案的链接,可以快速重现它:
VisualStudioNugetTestSolution.zip
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。