IPluginModel
私たちのコードは、メイン プログラムで定義されている定義済みの構造に準拠する dll をリモートでロードする「プラグイン」モデルを使用します。メイン プログラム自体にはいくつかのローカライズされたフォームがあり、UI 内のテキストとラベルの配置はすべて、異なるローカライズに基づいて変更されていThread.CurrentThread.CurrentUICulture
ます。
私たちが気づいたことの 1 つは、リモートでロードされた dll からのフォームまたはレポートが適切にローカライズされないことです。プラグインのさまざまなリソースを含むローカリゼーション dll が、メイン フォームの隣、プラグイン dll の隣、またはその他の場所のどこにあるかは問題ではないようです。メイン プログラムの実行時にアセンブリ自体が読み込まれるときに、アセンブリがローカライズされたリソースを正しく見つけるにはどうすればよいでしょうか。
Hereで使用されるメソッドにかなり似たコードがありますが、可能であれば、フォーム自体に対して resx を手動で実装する必要はありません。私が持っているコードはプラグイン自体の中に直接あり、CurrentUICulture が「en-US」でないときはいつでも呼び出されます。
理想的に言えば、私が探しているのは、ロードしたpluginName.resources.dll
ばかりのプラグインに直接関連付けられている をロードする方法です。メイン プロジェクトの bin フォルダーにさまざまなフォルダーが表示されますmain.resources.dll
。es フォルダーには .その時の私のやり方が悪かったのかもしれません…
アセンブリの読み込み [コード スニペット]
private void LoadPlugin(string filePath)
{
bool isValidPlugin = false;
Assembly asm = null;
try
{
asm = Assembly.LoadFrom(Path.Combine(Environment.CurrentDirectory, filePath));
//Do some type checking to make certain this is in fact one of OUR plugins
var p = (IFTLPlugin)Activator.CreateInstance(types[x]);
_plugins.Add(p.Prefix, p);
}
}
編集:この件に関するその他の考え
サテライト アセンブリ、実装できるイベント、またはオーバーライドできる関数を解決しようとする読み込み構造をインターセプトする方法はありますか?コードを手動で正しいリソース アセンブリに向けることができますか? アセンブリの解決に関するいくつかのことを見つけましたが、それはサテライト リソースではなく、直接読み込みに関するものでした。