外部アプリケーションからロードするタイプのコンソールアプリケーションを.NETコアに移植します。 Type.GetType("typename, assemblyname")
を使用する完全な.NET Frameworkでは、アセンブリが実行可能ファイルと同じフォルダにある場合に動作します。.net core 1.1:外部アセンブリからのType.GetTypeがnullを返します。
.NET Coreでは、ライブラリを配置する場所によってnullが返されます。
回避策として、私はSystem.Runtime.Loader
パッケージをインストールし、完全なパスからロードを強制するResolving
イベントにアタッチ:
AssemblyLoadContext.Default.Resolving += Default_Resolving;
type = Type.GetType(value);
デリゲートがある場合:
private static Assembly Default_Resolving(AssemblyLoadContext context, AssemblyName assembly)
{
return context.LoadFromAssemblyPath(Path.Combine(Directory.GetCurrentDirectory(), @"bin\Debug\netcoreapp1.1", $"{assembly.Name}.dll"));
}
質問は次のとおりです。 .NETコアは外部アセンブリをロードするときにどこを探しますか?
あなただ質問はここで回答されていますhttp://stackoverflow.com/questions/37895278/how-to-load-assemblies-located-in-a-folder -in-net-core-console-app –
はい、私は前にその質問を読んできましたが、私が学びたいのは、System.Runtime.Loaderパッケージをまったく使用しないと、 .GetType、.NETはアセンブリをどこで探しますか? – Farlop
@Farlop:なぜあなたの呼び出しがうまくいかなかったのか、そして.net coreがどのようにアセンブリを探すのかを理解することは、2つの別々の質問をしていると思います。後者を別の質問で尋ねるのが理にかなっています。しかし、私はこの文書にあなたを指摘できます:https://github.com/dotnet/core-setup/blob/master/Documentation/design-docs/corehost.md –