0

为了构建 Autocad 应用程序,我使用 C# 4.0。

我的应用程序有两个模块,一个用于 2005,另一个用于 2010 autocad。它使用 autocad 的特殊dll,但完成起来有些困难。由于 dll 具有相同的名称,所以对于 2005 年和 2010 年的 autocad 都应该是通用的,因此应用程序不可能有不同的 autocad 版本。它为 autocad interop dll 在reference.help 我为不同的模块使用不同的 dll。

  1. 应用有两个模块(2005,2010)
  2. 特殊dll
  3. 2005 和 2010 dll 具有相同的名称。
  4. 应用程序无法区分dll
  5. 帮助我在一个应用程序中使用不同的同名 dll。

注意:在单个项目中,它们可以完美运行。

需要帮助才能在一个应用程序中使用同名 dll。

如果有任何疑问,请询问,谢谢。

4

1 回答 1

0

我有一个类似的应用程序,它适用于 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。

于 2012-11-22T15:54:53.953 回答