我有一个类似的应用程序,它适用于 2006 年到 2013 年的 autocad(x86 和 x64)和 bricscad v12-v13。
为了解决这个问题,我为每个架构做了一个 Visual Studio 项目,每个项目都引用不同的 .dll,具体取决于 AutoCAD 版本。特别是这些项目中的每一个AcDbMgd.dll, AcMgd.dll, Autodesk.AutoCAD.Interop and Autodesk.AutoCAD.Interop.Common
,这些 dll 都特定于每个 AutoCAD 体系结构。
您必须注意,所有引用的 dll 都在复制本地 FALSE 中!
在我的情况下,所有项目都在不同的文件夹中编译,但如果您为每个项目分配不同的程序集名称,则不是必须的。
由于 AutoCAD API 从 2006 年到 2012 年是相同的(2013 年有一些差异),源代码与那些项目分开,每个项目都包含它作为链接源文件(转到解决方案资源管理器中的项目 ->右键单击-> 添加现有项目-> 选择源文件并按“添加为链接”)。这样,所有项目的源代码都相同,但它们的编译包含不同的 autocad dll。
就我而言,也有一些麻烦,因为 BricsCAD 有时与 AutoCAD 有不同的 API。为了解决这几种情况,我设置了一个条件编译符号并像这样使用它:
#if BricsCad
CADAPI.ApplicationServices.Application.SystemVariableChanged += new CADAPI.ApplicationServices.SystemVariableChangedEventHandler(Application_SystemVariableChanged);
#else
CADDB.LayoutManager.Current.LayoutSwitched += new CADDB.LayoutEventHandler(Current_LayoutSwitched);
#endif
如果您需要更多信息,请告诉我。顺便说一句,我认为您的主要问题是 autocad Dlls 的副本 local = true。