如何高效开发可转为AutoCAD .NET程序库的WPF应用?
嘿,这个反复切换项目类型的坑我也踩过!给你两个亲测好用的方案,完全不用再折腾项目类型切换:
方案1:拆分项目结构(最清晰易维护)
这是我最推荐的方式,把职责彻底分开,测试和插件开发互不干扰:
- 新建三个项目:
- WPF UI类库:存放所有WPF窗口、UserControl和ViewModel逻辑,这个项目完全不依赖AutoCAD的API,只专注界面和通用业务逻辑。
- 独立WPF测试应用:普通的WPF桌面应用,直接引用上面的UI类库,启动后就能实例化窗口快速验证功能,全程不用碰AutoCAD,启动速度拉满。
- AutoCAD .NET类库:引用UI类库,编写AutoCAD专属的命令逻辑——注意要在AutoCAD的线程上下文里启动WPF窗口,比如用
Autodesk.AutoCAD.ApplicationServices.Application.Invoke来调度:using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.ApplicationServices; public class AutoCADCommands { [CommandMethod("ShowMyWpfUI")] public void LaunchWindow() { Application.Invoke(() => { var mainWindow = new YourNamespace.MainWindow(); mainWindow.ShowDialog(); }); } }
- 好处:三个项目职责明确,想测试就启动WPF应用,想打包插件就编译AutoCAD类库,再也不用改项目类型,后期维护也更省心。
方案2:单项目双模式(适合轻量场景)
如果不想拆多个项目,也可以在同一个类库项目里做手脚,让它既能当独立WPF应用跑,又能当AutoCAD类库用:
- 右键项目→编辑项目文件,添加条件编译的配置,让Debug模式输出成WPF应用,Release模式输出成类库:
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> <OutputType>WinExe</OutputType> <StartupObject>YourNamespace.App</StartupObject> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)' == 'Release' "> <OutputType>Library</OutputType> </PropertyGroup> - 在项目里添加
App.xaml作为Debug模式的WPF入口,把它的Build Action设为ApplicationDefinition(Debug时生效,Release时可以改成Page或者用条件编译排除)。 - AutoCAD的命令代码用条件编译隔离,避免Debug模式下编译报错:
#if !DEBUG using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.ApplicationServices; public class AutoCADCommands { [CommandMethod("ShowMyWpfWindow")] public void ShowWindow() { Application.Invoke(() => { var window = new YourMainWindow(); window.ShowDialog(); }); } } #endif
- 好处:不用多开项目,Debug模式下按F5直接启动WPF窗口测试,Release模式编译成类库给AutoCAD用,切换只需改配置。
小贴士
不管用哪种方案,一定要把UI逻辑和AutoCAD的API完全解耦——比如ViewModel里不要直接调用AutoCAD对象,通过接口或委托传递数据,这样测试时完全不用依赖AutoCAD环境,验证效率更高。
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

