基本的なプラグインを作成しましたが、開発用にデプロイすると問題なく動作しました。
del "$(ProjectDir)\plugin.xml" "%Ocean2012Home%\PluginPackager.exe" /g "$(TargetPath)" "$(ProjectDir)\plugin.xml" "%Ocean2012Home%\PluginPackager.exe" /mh "$(ProjectDir)\plugin.xml" "%OCEAN2012HOME%\petrel.exe" "$(TargetDir)"
Ocean Dev Guideが示すように。
もっと複雑なことをしようとすると、dll とその参照の 1 つが見つからないことがわかります。私のプロジェクトが構築されている場所にdllが存在します。ProcMon で確認したところ、Ocean がそのフォルダー内の dll を確認していないことがわかりました。
特定のディレクトリ パスからアセンブリを強制的にロードする必要がありました ( C# - Load Assembly from Specific Directory Path を使用)。プラグインが正しくロードされたことを確認します。Petrel が問題を抱えている dll は、InfragisticsWPF.DockManager.dll です。
Petrel に取り組んでいる他のチームと話をしたところ、2012 バージョン以降、Petrel が見つからないため、一部の dll の LoadAssembly を強制する必要があるとのことでした。2011年版でうまくいったこと。2012年に導入された変更により、これが発生した可能性がありますか? 構成が不足していませんか?
アップデート
ご要望に応じて、Fusion Log Viewer に次のように表示されます。
InfragisticsWPF.DockManager.DLLの場合、アクセスしようとしました
アセンブリ マネージャのロード元: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll 実行可能ファイル C:\Program Files\Petrel 2012.3\petrel.exe の下で実行
- C:/Program Files/Petrel 2012.3/ および「Extensions」などの多くのサブ ディレクトリ C:/Program Files/Petrel 2012.3/ 内のすべてのフォルダーを通過したようです
- 同じフォルダー内でInfragisticsWPF.DockManager.EXEも検索しようとしました。
- すべてのプローブ URL が試行され、失敗しました。
私のプラグインがあるパスを検索することはありません。Petrel はInfragisticsWPF.DockManager.DLLの読み込みに失敗しますが、他の dll の読み込みには失敗しません。他の dll の場合、ログは同じように見えますが、最後の試行では、プラグインがあるフォルダーがチェックされます。
LOG: Attempting download of new URL
file:///c:/myFolder/MyAssembly.DLL.
LOG: Assembly download was successful. Attempting setup of file: c:\myFolder\myAssembly.dll
LOG: Entering run-from-source setup phase.
LOG: Assembly Name is: MyAssembly, Version=1.0.0.0, Culture=neutral
LOG: Where-ref bind Codebase does not match what is found in default context. Keep the result in LoadFrom context.
LOG: Binding succeeds. Returns assembly from c:\myFolder\myAssembly.dll.
LOG: Assembly is loaded in LoadFrom load context.
両方の dll は隣接していますが、何らかの理由で Petrel は InfragisticsWPF.DockManager.DLLに問題があり、存在する他の dll には問題がありません。