0

私は非常に複雑なアプリケーションを持っています、このアプリケーションは次のように構成されています:

Main.exe(スタンドアロンアプリケーションです)

Main.exe使用Project1.dll(フォームを含む)

内に含まれるフォームは、を使用しProject1.dllて別のdll(Project2.dll)によって拡張されますmono.addins

Main.exe私は正しい方法で拡張されたフォームを見ることができます。

また、autocadの内部を介してロードされるautocadコネクタ(たとえばProject3.dll)を実装しました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はそれぞれ同じディレクトリに保存されていることに注意してください。

問題はautocadexeファイルの別の場所にあると思いますが、いくつかの調整を試みましたが、何も機能しません。

私はもう試した:

  • .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 に答える