如何在一个应用程序中使用相同的名称DLL

时间:2012-06-21 06:00:14

标签: c# windows dll gac autocad

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

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

  1. 应用程序有两个模块(2005,2010)
  2. 特别dll
  3. 2005和2010 dll具有相同的名称。
  4. 应用程序无法区分dll
  5. 帮助我在一个应用程序中使用不同的同名dll。
  6. 注意:在个别项目中,他们的工作非常完美。

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

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

1 个答案:

答案 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。