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.0をAssembly.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 にマーシャリングする必要がありますか?