如何使用MSBuild为C++/CLI项目创建NuGet包
C++/CLI .vcxproj项目基于MSBuild打包NuGet包操作步骤
1. 导入打包所需目标
首先给你的C++/CLI项目通过NuGet包管理器安装NuGet.Build.Tasks.Pack包,安装后会自动向.vcxproj文件导入打包所需的MSBuild目标,无需手动修改配置引入。
2. 配置包元数据
打开.vcxproj项目文件,在全局PropertyGroup节点中添加NuGet包相关属性,无需额外编写.nuspec文件:
<PropertyGroup Label="NuGet配置"> <!-- 包唯一标识 --> <PackageId>自定义包ID</PackageId> <!-- 包版本号 --> <PackageVersion>1.0.0</PackageVersion> <!-- 包作者 --> <Authors>作者名称</Authors> <!-- 包功能描述 --> <Description>包的功能说明</Description> <!-- 目标框架,根据你项目的实际配置修改,比如net48、net6.0-windows等 --> <TargetFramework>net472</TargetFramework> <!-- 注册自定义输出文件处理逻辑 --> <TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);GetCppCliPackOutputs</TargetsForTfmSpecificBuildOutput> <!-- 按需补充其他属性,如<PackageLicenseExpression>MIT</PackageLicenseExpression>等 --> </PropertyGroup>
3. 配置待打包的输出文件
C++/CLI项目的默认输出不会被打包任务自动识别,需要添加自定义Target节点指定需要打进包的文件:
<Target Name="GetCppCliPackOutputs"> <ItemGroup> <!-- 主程序集dll --> <TfmSpecificBuildOutput Include="$(TargetPath)" /> <!-- 调试符号pdb,不需要可删除 --> <TfmSpecificBuildOutput Include="$(TargetDir)$(TargetName).pdb" /> <!-- XML文档注释,没有可删除 --> <TfmSpecificBuildOutput Include="$(TargetDir)$(TargetName).xml" Condition="Exists('$(TargetDir)$(TargetName).xml')" /> <!-- 若有其他需要打包的依赖文件,可按上述格式添加 --> </ItemGroup> </Target>
4. 执行打包命令
打开Visual Studio开发者命令行,切换到项目根目录,执行以下命令即可完成打包:msbuild /t:Pack /p:Configuration=Release /p:Platform=x64
执行完成后,生成的nupkg文件会输出到项目的输出目录下的nupkg文件夹中。
注意事项
- C++/CLI项目不支持AnyCPU平台,打包时指定的Platform参数必须和项目编译配置一致,可选值为x86、x64、ARM等
- 如果需要打包多平台版本,可以在包ID中加入平台标识区分,比如
MyPackage.x64、MyPackage.x86 - 如果项目依赖原生C++动态库,只需要将对应的dll文件添加到上述
GetCppCliPackOutputs的ItemGroup中即可随包发布
内容的提问来源于stack exchange,提问作者watkipet
相关产品推荐
相关产品推荐

