NuGet无法识别C++包中的.hpp文件,如何正确配置?
问题原因及解决方法
核心问题分析
你遇到的头文件找不到问题,主要由两个错误导致:
- MSBuild语法错误:你把
<PropertyGroup>嵌套在了<ItemGroup>内部,这不符合MSBuild的语法规范,Visual Studio无法正确解析该配置。 - 路径计算错误:你的targets文件放在
build/native/目录下,$(MSBuildThisFileDirectory)指向的是该目录的路径,而include目录和build是同级的,直接写$(MSBuildThisFileDirectory)/include会指向不存在的build/native/include路径。
正确配置步骤
1. 修正MyPackage.targets文件内容
将原文件的嵌套结构修正,同时调整路径到正确的include目录位置:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <!-- 直接在Project节点下定义PropertyGroup,不要嵌套在ItemGroup里 --> <PropertyGroup> <!-- 用Windows反斜杠分隔路径,通过..\..\回到包根目录下的include --> <AdditionalIncludeDirectories>$(MSBuildThisFileDirectory)..\..\include;$(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> </PropertyGroup> </Project>
2. 确保targets文件的放置位置正确
将修正后的MyPackage.targets文件放在NuGet包的build/native/目录下,最终包的结构应该是:
MyPackage.1.0.0.nupkg ├─ include/ │ └─ my_include.hpp ├─ build/ │ └─ native/ │ ├─ MyPackage.targets │ ├─ x64/ │ │ └─ (你的x64平台DLL/lib文件) │ └─ x86/ │ └─ (你的x86平台DLL/lib文件)
3. 重新打包并安装
- 用NuGet包资源管理器重新生成nupkg包
- 执行命令更新本地源的包:
nuget add MyPackage.1.0.0.nupkg -source D:\Nuget -Force - 在Visual Studio项目中卸载原包,重新安装最新版本
验证配置是否生效
安装完成后,右键VS项目 → 属性 → 配置属性 → C/C++ → 常规,查看附加包含目录,如果能看到NuGet包的include目录路径,说明配置生效,此时#include "my_include.hpp"就能正常找到文件了。
内容的提问来源于stack exchange,提问作者Turgut
相关产品推荐
相关产品推荐

