是的没错,看清楚了:
| 资源 | 位置 |
|---|---|
| 插件代码、编译产物(DLL) | 宿主机(Z:\E\code\code\...,你平时开发/管理的地方) |
| 插件的注册表项 | 虚拟机(HKLM:\SOFTWARE\SolidWorks\AddIns\{...}) |
| 加载机制 | 虚拟机的 SolidWorks 启动时,根据注册表里的\\vmware-host\Shared Folders\E\code\code\...UNC 路径,跨过 VMware 共享去宿主机加载 DLL |
也就是说注册是"跨机器"的——注册表写在 VM 那边,SolidWorks 跑在 VM 那边,但 DLL 物理上在宿主机。VMware 共享文件夹对这个挺友好,本地磁盘速度级别,SolidWorks 加载不会卡。
这样设计的好处:你以后改代码,重新编译一次,DLL 立刻同步到宿主机,VM 那边不用重新注册(注册表的 UNC 路径不变,SolidWorks 启动就会拿到最新版本)。开发循环很顺。
潜在风险:
- 宿主机如果关机/挂起/VMware Tools 异常,VM 启动 SolidWorks 时加载 addin 会失败
- 调试时栈跟踪看着是 VM 的,但 DLL 实际在宿主机,调试器会稍微别扭
如果你不喜欢跨机器:
- 让我帮你把编译产物从宿主机复制到 VM 本地(比如
C:\workspace\...),然后把注册表里的路径改成 VM 本地路径就行 - 代价是每次编译完要重新复制(或者做个 post-build 同步),注册路径也不用变
你倾向哪种?保持现状跨机器,还是切到 VM 本地?