私は現在AssemblyLoadContext.Default.LoadFromAssemblyPath(path/to/netstandard1.6lib.dll)
を使用していますが、ライブラリにはどのようなナゲット依存性を処理するのか不思議でしたか?実行時にNuget依存関係を参照する.NET Standardアセンブリをロードしていますか?
例: ライブラリAは、ライブラリBを動的にロードします。 ライブラリBは、NuGetのRedisに依存します。
ライブラリBは正しくロードされますが、redisクライアントを使用すると、Redisアセンブリが見つからないという厄介なFileNotFoundExceptionが発生します。このシナリオは実際には典型的なモジュールローダータイプのものです。
Assembly assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(path);
if (assembly == null)
throw new InvalidExtensionException(name, path);
TypeInfo type = assembly.DefinedTypes.FirstOrDefault(x => x.ImplementedInterfaces.Contains(typeof(IExtension)));
if (type == null)
throw new InvalidExtensionException(name, path);
IExtension extension = Activator.CreateInstance(type.AsType(), name, _dependencyUtility) as IExtension;
if (extension == null)
throw new InvalidExtensionException(name, path);
extensions.Add(extension);
Activatorがインスタンスを作成すると、その拡張子のコンストラクタが新しいredisクライアントを作成しようとします。そのすべてが爆発します。
実行時にナゲットから第3レベルの依存関係を処理する方法について考えていますか?
あなたはいくつかの情報をここに見つけるかもしれません。https://stackoverflow.com/questions/31859267/load-nuget-dependencies-at-runtime – Rex
これは現在の(どのような。NETのコア/標準の同等の)AppDomainより依存関係を持つ依存関係をロードするのではなく、 –