【问题标题】:how to use same name dll in one application如何在一个应用程序中使用同名 dll
【发布时间】:2012-06-23 08:17:14
【问题描述】:

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

我的应用程序有两个模块,一个用于 2005,另一个用于 2010 autocad。它使用 autocad 的特殊 dll,但完成起来有些困难。所有这些都应该是 2005 年和 2010 年 autocad 通用的,因为 dll 具有相同的名称,因此应用程序不可能有不同的 autocad 版本。为参考中的 autocad interop dll 创建问题。帮助我为不同的模块使用不同的 dll。

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

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

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

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

【问题讨论】:

  • “原始 Android”感谢您的回复,我会的,我请求您的帮助取决于您是否提供帮助,但我需要它。需要一些信息如何使用 GUID 显式加载DLL.by 再次感谢。

标签: c# windows dll gac autocad


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 2017-10-15
    • 2010-11-13
    • 2023-03-29
    相关资源
    最近更新 更多