要构建Autocad应用程序,我使用C#4.0。
我的应用程序有两个模块用于2005年,另一个用于2010 autocad 。它使用特殊的 dll的的autocad,但是面临一些难以完成它。所有应该是2005和2010 autocad的通用,因为dll具有相同的名称,应用程序不可能有不同的autocad版本。在reference.help我为不同的模块使用不同的dll创建autocad interop dll的问题。
注意:在个别项目中,他们的工作非常完美。
需要帮助才能在一个应用程序中使用相同的名称dll。
如果有任何疑问请咨询,先谢谢。
答案 0 :(得分:0)
我有一个类似的应用程序,它适用于2006年至2013年的autocad(x86和x64)以及bricscad v12-v13。
为了解决这个问题,我为每个架构做了一个visual studio项目,每个项目都根据autocad版本引用不同的.dll。特别是每个项目都引用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的copy local = true。