1. 背景与目标
1.1 项目背景
本项目是一个 NX 二次开发项目,使用 NX Open C++ API && UFUN 开发工具。项目最初使用 Visual Studio 2017 创建和维护。
1.2 迁移目标
- 在 VSCode 中进行代码编辑:利用 VSCode 的轻量级、丰富的扩展生态
- 使用 Cline AI 辅助编程:提升开发效率
- 保持原始配置不变:确保项目仍可在 VS2017 中编译和维护
- 使用原有编译工具链:继续使用 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 |
| 编译构建 | 编译、链接、生成 DLL | MSBuild (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 |
| IDE | Visual Studio 2017 Professional |
| 工具集 | MSVC v141 (VS2017) |
| Windows SDK | 10.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,具有以下特点:
-
头文件路径:
%UGII_BASE_DIR%\ugopen -
库文件路径:
%UGII_BASE_DIR%\ugopen -
关键库文件:
libufun.lib- UFUN C APIlibnxopencpp.lib- NX Open C++ 核心库libnxopencpp_*.lib- 各模块库(features, assemblies, drawings 等)libugopenint.lib- 交互库libnxopenuicpp.lib- UI 库
-
环境变量:
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.json | C++ 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 |
windowsSdkVersion | Windows SDK 版本 | 来自 vcxproj 的 WindowsTargetPlatformVersion |
intelliSenseMode | IntelliSense 模式 | 根据平台和编译器选择 |
为什么这样配置?
includePath包含了 NX Open 头文件路径(使用UGII_BASE_DIR环境变量),与原项目保持一致- 添加了 MSVC 和 Windows SDK 的头文件路径,确保标准库头文件可被识别
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 配置"
}
]
}
配置说明:
| 字段 | 说明 |
|---|---|
command | MSBuild 完整路径(VS2017 版本) |
args | 编译参数,直接传递给 MSBuild |
/p:Configuration=Debug | 编译配置 |
/p:Platform=x64 | 目标平台 |
/p:PlatformToolset=v141 | 使用 VS2017 工具集 |
problemMatcher | 编译错误匹配器,用于在问题面板显示错误 |
为什么使用 MSBuild 完整路径?
- PowerShell 默认不包含 MSBuild 在 PATH 中
- 使用完整路径可以避免环境变量问题
- 确保使用正确版本的 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 打开项目
- 打开 VSCode
- 选择
文件→打开文件夹 - 选择项目根目录(包含
.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 未识别
解决方案:
- 确认系统环境变量中已设置
UGII_BASE_DIR - 重启 VSCode 使环境变量生效
- 按
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 环境变量未正确设置
解决方案:
- 检查环境变量:
echo %UGII_BASE_DIR% - 确认
%UGII_BASE_DIR%\ugopen\libufun.lib文件存在 - 确保 NX 已正确安装
7.4 中文乱码问题
症状:中文注释或字符串显示乱码
解决方案:
- 点击 VSCode 底部状态栏的编码显示(通常显示 UTF-8)
- 选择 “Reopen with Encoding”
- 选择 “GB2312”
7.5 仍需在 VS2017 中开发
解决方案:完全兼容!直接在 VS2017 中打开 sln 文件即可,所有配置保持不变。
8. 总结
8.1 迁移要点
- 不修改原始项目文件:所有 VSCode 配置都放在独立的
.vscode目录中 - 使用原有工具链:继续使用 MSBuild 和 VS2017 编译器 (v141)
- 保持环境变量:使用
$(UGII_BASE_DIR)指向 NX 安装目录 - 配置 IntelliSense:让 VSCode 理解 NX Open API
8.2 文件变更清单
| 操作 | 文件 | 说明 |
|---|---|---|
| 新增 | .vscode/c_cpp_properties.json | IntelliSense 配置 |
| 新增 | .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)

3274

被折叠的 条评论
为什么被折叠?



