リフレクションを使用して、インストールされているアセンブリの最新バージョンを GAC に動的にロードしたいと考えています。
これまでのところ、これを達成するための複数の実用的な方法を見つけましたが、それらにはすべて特定の欠点があります.
最も簡単な解決策は、Assembly.LoadWithPartialName()
メソッドを使用することです。ただし、このメソッドは .NET Framework 2 以降では廃止されています。
var assembly = Assembly.LoadWithPartialName("Microsoft.WindowsAzure.ServiceRuntime");
もう 1 つの可能性は、Assembly.Load()
(古い警告で推奨されているように) を使用し、try/catch ブロックで完全修飾アセンブリ名を使用してさまざまなアセンブリ バージョンを呼び出し、インストールされている最新バージョンを取得することです。これはメンテナンスを求めて叫んでおり、ただ汚れているように見えます:
Assembly assembly = null;
try
{
assembly = Assembly.Load("Microsoft.WindowsAzure.ServiceRuntime, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");
}
catch (FileNotFoundException) { }
try
{
assembly = Assembly.Load("Microsoft.WindowsAzure.ServiceRuntime, Version=1.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");
}
catch (FileNotFoundException) { }
最後になりましたが、メソッドを使用してSOでここで見つけた 別のソリューションAssembly.LoadFrom()
があり、基本的にアセンブリマネージャーモジュールをインポートしてfusion.dll
、最新バージョンのパスを把握します。これは、このような「単純な」タスクには多すぎるようです。
古いメソッドを使用せずに、魔法の文字列を使用してメンテナンス地獄を作成したり、アンマネージ コードを呼び出したりすることなく、これを達成するためのより良い解決策はありませんか?
前もって感謝します!