1

基本的なプラグインを作成しましたが、開発用にデプロイすると問題なく動作しました。

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 には問題がありません。

4

2 に答える 2

2

機能しているプラ​​グインでも同じ問題が発生していました。<probing privatePath="Public;Extensions;..."/>その理由は、「PluginManager」を使用してプラグインをインストールしても、ファイルpetrel.exe.configの属性が変更されなくなったためです。プラグインを Petrel (モジュールの追加) ディレクトリにインストールする古い方法では、「プローブ パス」が追加され、Assembly.LoadFile がそのようなディレクトリを見つけます。

テストを書く...プラグインのディレクトリを「プローブパス」に手動で追加すると、問題は解決します。シュルンベルジェがこの変更を行った理由と、これを行うためのより正しい方法があるかどうかはまだわかりません.

于 2014-04-30T13:07:31.163 に答える
0

pluginpackager.exe.config の petrel フォルダー内にあるプラグイン フォルダー パスを追加する必要があります。

于 2015-04-15T21:01:29.417 に答える