0

我有一个相当复杂的应用程序,这个应用程序的结构如下:

Main.exe(是一个独立的应用程序)

Main.exe用途Project1.dll(其中包含一个表格)

中包含的表单Project1.dll由另一个 dll ( Project2.dll) 扩展,使用mono.addins

Main.exe我可以看到以正确方式扩展的表单。

我还实现了一个Project3.dll通过 autocad 内部加载的 autocad 连接器(比如 )netload,该连接器使用 的形式,Project1.dll并且该形式也必须在 autocad 中扩展。

结果是在 AutoCAD 中我的表单似乎没有扩展,如果我调试代码:

        AddinManager.Initialize();
        AddinManager.Registry.Update(null);

        foreach (IMyPlugin Addin in AddinManager.GetExtensionObjects(typeof(IMyPlugin)))
        {
            if (Addin.IsPluginLicensed)
                EmbedPlugin(Addin);
        }

foreach 不会产生任何插件。

请注意,这些 .dll 中的每一个都存储在同一目录中。

我想问题出在 autocad exe 文件的不同位置,但我尝试了一些调整,但都没有工作..

我试过了:

  • 创建一个包含 .dlls 路径的 .addins 文件。
  • 使用所有 .dll 的副本创建一个子文件夹 \addins\
  • 初始化AddinManager给出的.dll路径
  • 更新AddinManager.Registry给定的 .dll 路径

代码结构相当复杂(涉及许多文件和项目),因此不太容易粘贴或提供一些工作代码。

4

1 回答 1

0

我已经解决了这个问题。Mono.Addins是从上下文中加载的LoadFrom,这导致了 DllHell 问题。Mono.Addins这里描述的手动加载解决了这个问题。

于 2012-11-22T16:01:34.833 回答