アプリケーションでは、リリースされたすべてのアセンブリバージョン番号を事前に知ることができないサードパーティアセンブリを動的にロードする必要があります。たとえば、アセンブリのメジャーバージョン番号は「12」でなければならないことがわかります。 PCでは、同一のアセンブリの複数のバージョンがインストールされ、メジャーバージョン番号の上位と下位の両方がインストールされます。ワイルドカードを使用してアセンブリをGACからロードする方法
I.e.我々は
Assembly myAssembly = Assembly.Load("SampleAssembly, Version=12.*.*.*");
ようなものが必要でしょうし、アセンブリはバージョン11.1.2.3、12.7.6.5、および13.9.8.7がインストールされている場合、それはバージョン12.7.6.5をロードする必要があります。
I.e.バージョン番号コンポーネントにワイルドカードを指定することが可能でなければならず、Culture
とPublicKeyToken
を省略することも可能でなければなりません。 Assembly.Load()
でこれを行うと、FileNotFoundException
となります。
Assembly.LoadWithPartialName()
は常にバージョン番号が最も高いアセンブリを読み込みますが、インストールされているアセンブリのバージョン番号よりも小さい特定のメジャーバージョン番号が必要な場合があります。
これは可能ですか?
としてあなたのワイルドカードにそれを比較することができwoldcards、私はAssemblyResolveイベントとバージョンチェックでカスタム方法を使用します。この回答を参照してください:http://stackoverflow.com/questions/1235253/how-is-an-assembly-resolved-in-net –
@Davide: AssemblyResolveが正しく理解されている場合は、アセンブリのロードが失敗し、イベントハンドラが正しいアセンブリの場所を返す必要がある場合にのみ発生します。 AssemblyResolveのイベント引数が同じ名前の使用可能なアセンブリのリストを提供しないため、これが私の要件にどのように役立つかはわかりません。 –
これはまったく不可能です。アプリケーションの.configファイルで ''要素を使用します。 –