0

Assembly.ReflectionOnlyLoadFromを使用したシナリオは次のとおりです。

私のアセンブリInspectedとリフレクション Application Inspectorの両方がAssembly Dependencyを参照しています。

InspectorがDependency 1.0.0.0を参照し、 InspectedがDependency 1.1.0.0を参照する場合、InspectorはDependencyの型を使用するInspectedの型またはメソッドを反映できません。そのようなタイプがヒットした瞬間、次のようになります。

System.IO.FileLoadException: ファイルまたはアセンブリ 'Dependency、Version=1.1.0.0、Culture=neutral、PublicKeyToken=null' またはその依存関係の 1 つを読み込めませんでした。見つかったアセンブリのマニフェスト定義がアセンブリ参照と一致しません。(HRESULT からの例外: 0x80131040)

ただし、InspectorはDependency 1.1.0.0自体を正常に反映できるため、 Dependency 1.1.0.0Assembly.ReflectionOnlyLoadFromとしてロードすると、既にDependency 1.0.0.0を使用しているアセンブリから機能します。

アセンブリをロードし、その依存関係をプリロードするために使用するコードは次のとおりです。

var assembly = Assembly.ReflectionOnlyLoadFrom(assemblyPath);
foreach (var assemblyName in assembly.GetReferencedAssemblies()) {
  Assembly.ReflectionOnlyLoad(assemblyName.FullName);
}

foreach にブレークポイントを設定し、それがロードされていることを確認し、その存在についてAppDomain.CurrentDomain.ReflectionOnlyGetAssemblies()もチェックしたため、 Dependency 1.1.0.0が解決されないという問題ではありません。無事に読み込まれました。しかし、その後assembly.GetTypes()を実行すると、死んでしまいます。

これについて私ができることはありますか、または別の AppDomain のアセンブリを反映し、メタデータをDependency 1.0.0.0への参照を持つ appdomain にマーシャリングする必要がありますか?

4

2 に答える 2

0

.NET Framework 共通言語ランタイムのカスタマイズ では、Load と LoadFrom がロードされたアセンブリに対して個別の「スコープ」を作成することが説明されており、これが問題を説明していると思います。試みるべきことは、自分でアセンブリを見つけて、それらをすべて LoadFrom でロードすることです。

AppDomain.AssemblyResolve イベントを処理してみましたか?

于 2010-02-24T09:01:26.807 に答える