You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

借助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="&quot;$(SolutionDir)SignTools\NX$(NXVersion).bat&quot; &quot;$(OutputPath)$(AssemblyName).dll&quot;" />
</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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 21:15:24