アセンブリを指定すると、依存関係アセンブリのリストを生成するライブラリを作成しています-依存関係の依存関係を含みます。意図した使用シナリオには、主にマネージ コード (.NET) アセンブリが含まれます。
この依存関係リストを計算するための私のアプローチは次のとおりです。
- 一時的な AppDomain を作成する ( code )
- その AppDomain にヘルパー クラスのインスタンスを作成します ( code )
- そのヘルパーに最初のアセンブリをフィードします: 依存関係ツリーのルート ( code )
- 一時的な AppDomain のリフレクションのみのコンテキスト ( code )で検査のためにそのアセンブリを読み込みます
- 依存関係を再帰的に追跡する
このヘルパー クラスは、 .NET アセンブリのみを参照するアセンブリで定義されていることに注意してください。他には何もありません。メイン ライブラリのアセンブリには、アセンブリへの参照があります。 System.Reactive
一時的な AppDomain にはこれらのアセンブリが読み込まれていないことが予想されますが、そうでないことを示唆するエラーが表示されます。System.Reactive
API restriction: The assembly 'file:///X:\some-path\System.Reactive.Linq.dll' has already loaded from a different location. It cannot be loaded from a new location within the same appdomain.
at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.InternalLoadFrom(String assemblyFile, Evidence securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm, Boolean forIntrospection, Boolean suppressSecurityChecks, StackCrawlMark& stackMark)
at System.Reflection.Assembly.ReflectionOnlyLoadFrom(String assemblyFile)
at DependencyResolver.AppDomainHelper.Util.AssemblyLoader.ReflectionOnlyLoadFromAssemblyPath(AssemblyName assembly, FileNotFoundException originalException) in DependencyResolver\DependencyResolver.AppDomainHelper\Util\AssemblyLoader.cs:line 96
at DependencyResolver.AppDomainHelper.Util.AssemblyLoader.ReflectionOnlyLoad(AssemblyName assembly) in DependencyResolver\DependencyResolver.AppDomainHelper\Util\AssemblyLoader.cs:line 67
at DependencyResolver.AppDomainHelper.Util.AssemblyLoader.ReflectionOnlyLoad(AssemblyName assembly)
at DependencyResolver.Resolver.GetAllDependenciesRecursive(AssemblyName start, Func`2 filter, Func`2 preProcess, Action`1 postProcess) in DependencyResolver\DependencyResolver\Resolver.cs:line 39
at DependencyResolver.Resolver.<>c__DisplayClass6.<GetAllDependenciesRecursive>b__5(AssemblyName an) in DependencyResolver\DependencyResolver\Resolver.cs:line 51
at System.Reactive.Linq.Observαble.Select`2._.OnNext(TSource value)
これは、異なるバージョンの を含むアセンブリの山でライブラリを使用すると発生しますSystem.Reactive.Linq.dll
。
一時的な AppDomain が必要のないものを読み込まないようにするにはどうすればよいですか?