NXOpen C++ 项目 Visual Studio 2017 迁移 VSCode 开发

1. 背景与目标

1.1 项目背景

本项目是一个 NX 二次开发项目,使用 NX Open C++ API && UFUN 开发工具。项目最初使用 Visual Studio 2017 创建和维护。

1.2 迁移目标

  1. 在 VSCode 中进行代码编辑:利用 VSCode 的轻量级、丰富的扩展生态
  2. 使用 Cline AI 辅助编程:提升开发效率
  3. 保持原始配置不变:确保项目仍可在 VS2017 中编译和维护
  4. 使用原有编译工具链:继续使用 MSBuild 编译,而非迁移到 CMake

1.3 为什么选择这条路线?

方案优点缺点是否采用
VSCode + MSBuild轻量、AI辅助、配置简单、兼容原项目调试配置稍复杂采用
完全迁移到 CMake跨平台、现代构建系统需要重写构建配置、破坏原有项目结构不采用
仅使用 VS2017无需额外配置无 AI 辅助、IDE 较重不采用
VSCode + CMake现代化工具链与原项目不兼容、团队协作困难不采用

2. 开发路线设计

2.1 核心理念

+-------------------------------------------------------+
|                    开发工作流程                        |
+-------------------------------------------------------+

[ VSCode + Cline ] --------> 代码编辑、智能提示、AI辅助编程
          |
          v
[   原始项目文件  ] <-------- 不修改 .vcxproj/.sln 等配置文件
          |
          v
[   MSBuild 编译 ] --------> 使用 VS2017 工具链 (v141)
          |
          v
[    NX 环境变量  ] ---------> $(UGII_BASE_DIR) 保持原样

2.2 职责分离

组件职责工具
代码编辑编写、修改、重构代码VSCode + Cline
智能提示代码补全、语法检查C/C++ Extension
编译构建编译、链接、生成 DLLMSBuild (VS2017)
调试运行在 NX 中测试NX 软件

2.3 文件变更策略

原始项目文件(保持不变):
├── Welding_Parts_list.vcxproj      # VS2017 项目文件
├── Welding_Parts_list.vcxproj.filters
├── Welding_Parts_list.vcxproj.user
├── Welding_Parts_list.cpp          # 源代码
├── Welding_Parts_list.hpp          # 头文件
├── CustomMSExcel.h/lib/dll         # 第三方库
└── x64/                            # 编译输出

新增 VSCode 配置文件(独立存放):
└── .vscode/
    ├── c_cpp_properties.json       # IntelliSense 配置
    ├── tasks.json                  # 构建任务
    ├── settings.json               # 工作区设置
    ├── extensions.json             # 扩展推荐
    └── README_NX_OPEN_VSCODE.md    # 使用说明

3. 环境信息

3.1 原始开发环境

组件版本/路径
操作系统Windows 10
IDEVisual Studio 2017 Professional
工具集MSVC v141 (VS2017)
Windows SDK10.0.17763.0
NX 版本NX1872 / NX1884
NX 安装路径D:\Program Files\Siemens\NX1872
NX Open API$(UGII_BASE_DIR)\ugopen

3.2 NX Open 项目特点

NX Open 以及 UFUN 是 NX 软件的二次开发 API,具有以下特点:

  1. 头文件路径: %UGII_BASE_DIR%\ugopen

  2. 库文件路径: %UGII_BASE_DIR%\ugopen

  3. 关键库文件:

    • libufun.lib - UFUN C API
    • libnxopencpp.lib - NX Open C++ 核心库
    • libnxopencpp_*.lib - 各模块库(features, assemblies, drawings 等)
    • libugopenint.lib - 交互库
    • libnxopenuicpp.lib - UI 库
  4. 环境变量:

    • UGII_BASE_DIR - NX 安装根目录
    • UGII_USER_DIR - 用户自定义目录

3.3 项目配置分析

Welding_Parts_list.vcxproj 中提取的关键配置:

<!-- 平台工具集 -->
<PlatformToolset>v141</PlatformToolset>

<!-- 字符集 -->
<CharacterSet>Unicode</CharacterSet>

<!-- MFC 链接方式 -->
<UseOfMfc>Dynamic</UseOfMfc>

<!-- 头文件路径 -->
<AdditionalIncludeDirectories>$(UGII_BASE_DIR)\ugopen</AdditionalIncludeDirectories>

<!-- 库文件路径 -->
<AdditionalLibraryDirectories>$(UGII_BASE_DIR)\ugopen</AdditionalLibraryDirectories>

<!-- 输出目录 -->
<OutDir>E:/NX1884Dev/NX1884Dev/Application</OutDir>

<!-- 预处理器定义 -->
<PreprocessorDefinitions>_SECURE_SCL=0;_USRDLL</PreprocessorDefinitions>

4. 迁移步骤

4.1 安装必要软件

4.1.1 Visual Studio 2017(已安装)

确保安装了以下工作负载:

  • 使用 C++ 的桌面开发
  • Windows 10 SDK (10.0.17763.0)
4.1.2 Visual Studio Code

从官网下载安装

4.2 创建 VSCode 配置文件

4.2.1 创建 .vscode 目录

在项目根目录下创建 .vscode 文件夹,用于存放 VSCode 配置文件。

4.2.2 配置文件清单
文件用途
c_cpp_properties.jsonC++ IntelliSense 配置
tasks.json构建任务配置
settings.json工作区设置
extensions.json推荐扩展列表

5. 配置文件详解

5.1 c_cpp_properties.json - IntelliSense 配置

此文件配置 C++ 扩展的代码智能提示功能。

{
    "configurations": [
        {
            "name": "x64-Debug-NX",
            "includePath": [
                "${workspaceFolder}/**",
                "${env:UGII_BASE_DIR}\\ugopen",
                "${env:UGII_BASE_DIR}\\ugopen\\cppsrc",
                "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Professional\\VC\\Tools\\MSVC\\14.16.27023\\include",
                "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.17763.0\\ucrt",
                "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.17763.0\\um",
                "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.17763.0\\shared"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE",
                "_USRDLL",
                "_SECURE_SCL=0"
            ],
            "windowsSdkVersion": "10.0.17763.0",
            "compilerPath": "",
            "cStandard": "c17",
            "cppStandard": "c++17",
            "intelliSenseMode": "windows-msvc-x64",
            "configurationProvider": "ms-vscode.cpptools"
        }
    ],
    "version": 4
}

配置说明:

字段说明来源
includePath头文件搜索路径来自 vcxproj 的 AdditionalIncludeDirectories
defines预处理器宏定义来自 vcxproj 的 PreprocessorDefinitions
windowsSdkVersionWindows SDK 版本来自 vcxproj 的 WindowsTargetPlatformVersion
intelliSenseModeIntelliSense 模式根据平台和编译器选择

为什么这样配置?

  1. includePath 包含了 NX Open 头文件路径(使用 UGII_BASE_DIR 环境变量),与原项目保持一致
  2. 添加了 MSVC 和 Windows SDK 的头文件路径,确保标准库头文件可被识别
  3. defines 从原项目配置中提取,确保条件编译正确

5.2 tasks.json - 构建任务配置

此文件配置 MSBuild 编译任务。

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Build Debug x64",
            "type": "shell",
            "command": "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Professional\\MSBuild\\15.0\\Bin\\MSBuild.exe",
            "args": [
                "${workspaceFolder}\\Welding_Parts_list.vcxproj",
                "/p:Configuration=Debug",
                "/p:Platform=x64",
                "/p:PlatformToolset=v141",
                "/verbosity:minimal"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "problemMatcher": "$msCompile",
            "detail": "使用 MSBuild 编译 Debug x64 配置"
        }
    ]
}

配置说明:

字段说明
commandMSBuild 完整路径(VS2017 版本)
args编译参数,直接传递给 MSBuild
/p:Configuration=Debug编译配置
/p:Platform=x64目标平台
/p:PlatformToolset=v141使用 VS2017 工具集
problemMatcher编译错误匹配器,用于在问题面板显示错误

为什么使用 MSBuild 完整路径?

  1. PowerShell 默认不包含 MSBuild 在 PATH 中
  2. 使用完整路径可以避免环境变量问题
  3. 确保使用正确版本的 MSBuild(VS2017 对应 15.0)

5.3 settings.json - 工作区设置

{
    "files.encoding": "gb2312",
    "files.autoGuessEncoding": true
}

5.4 extensions.json - 扩展推荐

{
    "recommendations": [
        "ms-vscode.cpptools",
        "ms-vscode.cpptools-extension-pack"
    ]
}

6. 使用方法

6.1 打开项目

  1. 打开 VSCode
  2. 选择 文件打开文件夹
  3. 选择项目根目录(包含 .vcxproj 文件的目录)

6.2 编译项目

方法一:使用快捷键

按 Ctrl+Shift+B → 选择 "Build Debug x64"

方法二:使用命令面板

按 Ctrl+Shift+P → 输入 "Tasks: Run Task" → 选择构建任务

方法三:使用命令行(PowerShell)

& "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\MSBuild.exe" Welding_Parts_list.vcxproj /p:Configuration=Debug /p:Platform=x64 /p:PlatformToolset=v141

6.4 验证编译结果

编译成功后会显示:

Welding_Parts_list.vcxproj -> E:/NX1884Dev/NX1884Dev/Application\Welding_Parts_list.dll

7. 常见问题与解决方案

7.1 IntelliSense 无法识别 NX Open 头文件

症状#include <NXOpen/Session.hxx> 等头文件报错

原因UGII_BASE_DIR 环境变量未设置或 VSCode 未识别

解决方案

  1. 确认系统环境变量中已设置 UGII_BASE_DIR
  2. 重启 VSCode 使环境变量生效
  3. Ctrl+Shift+P → 输入 “C/C++: Reset IntelliSense Database”

7.2 MSBuild 命令找不到

症状无法将"msbuild"项识别为 cmdlet

原因:当前终端是 PowerShell,MSBuild 不在 PATH 中

解决方案:使用 MSBuild 完整路径,已在 tasks.json 中配置

7.3 编译时找不到 NX 库文件

症状无法解析的外部符号找不到 libufun.lib

原因UGII_BASE_DIR 环境变量未正确设置

解决方案

  1. 检查环境变量:echo %UGII_BASE_DIR%
  2. 确认 %UGII_BASE_DIR%\ugopen\libufun.lib 文件存在
  3. 确保 NX 已正确安装

7.4 中文乱码问题

症状:中文注释或字符串显示乱码

解决方案

  1. 点击 VSCode 底部状态栏的编码显示(通常显示 UTF-8)
  2. 选择 “Reopen with Encoding”
  3. 选择 “GB2312”

7.5 仍需在 VS2017 中开发

解决方案:完全兼容!直接在 VS2017 中打开 sln 文件即可,所有配置保持不变。


8. 总结

8.1 迁移要点

  1. 不修改原始项目文件:所有 VSCode 配置都放在独立的 .vscode 目录中
  2. 使用原有工具链:继续使用 MSBuild 和 VS2017 编译器 (v141)
  3. 保持环境变量:使用 $(UGII_BASE_DIR) 指向 NX 安装目录
  4. 配置 IntelliSense:让 VSCode 理解 NX Open API

8.2 文件变更清单

操作文件说明
新增.vscode/c_cpp_properties.jsonIntelliSense 配置
新增.vscode/tasks.json构建任务
新增.vscode/settings.json工作区设置
新增.vscode/extensions.json扩展推荐
不变*.vcxproj原项目配置
不变*.cpp/hpp源代码

8.3 Git 状态验证

$ git status --porcelain
?? .vscode/

$ git diff
# 无输出,表示原始文件未被修改

8.4 适用场景

本迁移方案适用于以下场景:

  • Visual Studio 2017 创建的 C++ 项目
  • NX Open 二次开发项目
  • 需要保持原项目配置不变
  • 团队协作,部分成员使用 VSCode
  • 希望使用 AI 辅助编程(如 Cline)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值