借助Visual Studio构建动作/预处理器指令实现NX插件多版本批量构建
NX插件多版本一键构建方案
1. 用MSBuild多配置搞定版本区分
直接在项目文件(.csproj/.vbproj)里给每个NX版本单独配置构建参数,不用手动换资源。
添加版本专属配置:
打开项目文件,在现有<PropertyGroup>之外,给每个NX版本加专属配置节点,比如:<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'NX1980|AnyCPU' "> <OutputPath>bin\NX1980\</OutputPath> <DefineConstants>NX1980;$(DefineConstants)</DefineConstants> <NXVersion>1980</NXVersion> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'NX2007|AnyCPU' "> <OutputPath>bin\NX2007\</OutputPath> <DefineConstants>NX2007;$(DefineConstants)</DefineConstants> <NXVersion>2007</NXVersion> </PropertyGroup>这里
OutputPath指定专属输出目录,DefineConstants加预处理器指令用来区分版本,NXVersion存版本号供后续签名用。自动绑定版本资源:
不同版本的资源文件用条件判断设置嵌入,避免手动替换:<EmbeddedResource Include="Resources\NX1980.resx" Condition=" '$(DefineConstants)' Contains('NX1980') "> <LogicalName>Resources.resx</LogicalName> </EmbeddedResource> <EmbeddedResource Include="Resources\NX2007.resx" Condition=" '$(DefineConstants)' Contains('NX2007') "> <LogicalName>Resources.resx</LogicalName> </EmbeddedResource>这样每个配置编译时只会嵌入对应版本的资源,逻辑名称统一,代码里不用改引用路径。
2. 构建后自动跑签名批处理
MSBuild自带AfterBuild目标,能在编译完成后自动执行签名脚本,不用手动操作。
在项目文件末尾加这段:
<Target Name="AfterBuild" Condition=" '$(Configuration)' != 'Debug' "> <!-- 调用对应版本的签名批处理,路径根据你的实际情况调整 --> <Exec Command=""$(SolutionDir)SignTools\NX$(NXVersion).bat" "$(OutputPath)$(AssemblyName).dll"" /> </Target>
把签名批处理统一放在项目根目录的SignTools文件夹里,命名成NX1980.bat、NX2007.bat,这样会自动匹配每个配置的NXVersion参数。
3. 一键批量构建所有版本
配置好后,两种方式一键生成所有版本:
- Visual Studio界面操作:顶部菜单点「生成」→「批量生成」,勾选所有NX版本的配置,点「生成」就行。
- 命令行批量构建:用MSBuild命令一次性跑所有配置,比如:
msbuild YourPlugin.csproj /t:Build /p:Configuration=NX1980;Platform=AnyCPU /p:Configuration=NX2007;Platform=AnyCPU
4. 预处理器指令的实际用法
代码里用预处理器指令区分不同版本的API或逻辑,比如:
#if NX1980 using NXOpen.UF.UF1980; #elif NX2007 using NXOpen.UF.UF2007; #endif public void InitNX() { #if NX1980 var ufSession = UF1980.UFSession.GetUFSession(); #elif NX2007 var ufSession = UF2007.UFSession.GetUFSession(); #endif // 后续逻辑 }
注意点
- 确认每个NX版本的签名批处理路径正确,最好把批处理和NX版本的工具路径绑定好,避免找不到工具。
- 测试每个配置的编译结果,检查资源文件是否正确嵌入、签名是否生效。
- 如果有NX版本专属的DLL引用,也可以用条件判断在项目文件里添加:
<Reference Include="NXOpen, Version=1980.0.0.0, Culture=neutral, PublicKeyToken=..." Condition=" '$(DefineConstants)' Contains('NX1980') "> <HintPath>Libs\NX1980\NXOpen.dll</HintPath> </Reference>
内容的提问来源于stack exchange,提问作者NobleMO
相关产品推荐
相关产品推荐

