1

アセンブリをロードするときは、競合を回避するために、assembly.Nameの代わりにassembly.FullNameを使用する必要があります。これは次の形式です。

"SampleAssembly、Version = 1.0.2004.0、Culture = neutral、PublicKeyToken =8744b20f8da049e3"

MSDNのドキュメントから、この文字列には「ProcessorArchitecture=????」を含めることもできます。どこ ????MSIL、X86などにすることができますが、オプションです。

ProcessorArchitectureプロパティがassemblyName文字列で定義されていない場合、Assembly.Loadは、複数のプロセッサアーキテクチャ(x86、Amd64、MSIL)用にコンパイルされたアセンブリをロードするためにGACをクエリするためにどのルールを使用しますか?

よろしくお願いします。

4

1 に答える 1

1

それは暗黙的です。Assembly.Load() ステートメントが実行されるまでに、ローダー shim は、プロセスが 32 ビット モードで実行されるか 64 ビット モードで実行されるかを既に決定しています。したがって、たとえば、64 ビット モードを選択すると、msil または amd64 をターゲットとするアセンブリのみが機能します。

GAC は 3 つの部分に分かれており、サブディレクトリ名は GAC_MSIL、GAC_32、および GAC_64 です。Fusion ローダーは、最初に GAC_MSIL を調べて、一致するアセンブリが見つかるかどうかを確認します。次に、他の 2 つのうちの1 つを検索して一致するものを探します。あいまいさはありません。

于 2012-05-08T09:03:59.563 に答える