MVCコントローラでは、アセンブリをロードするのにAssemblyLoadContext.Default.LoadFromAssemblyPath(pathToDll);
を使用します。実行時に指定した.dllファイルを削除または置き換えたいです。これはファイルが破棄されていないため不可能です。 .dllファイルを破棄する方法はありますか? AppDomain
クラスを使用するソリューションがありますが、asp.netコアでは使用できません。AssemblyLoadContext .dllを破棄します。
背景: ユーザーが指定したインタフェースの実装を含むカスタムの.dllファイルをアップロードすることができます。また、ユーザーは自分のファイルを置き換えることができます。 (あなたがあなたのアプリケーションドメインにDLLをロードするときのappDomainが破壊される前に、このDLLが無料ではありません
public static ContainerConfiguration WithAssembliesInPath(
this ContainerConfiguration configuration,
string path, AttributedModelProvider conventions,
SearchOption searchOption = SearchOption.TopDirectoryOnly)
{
var fileNames = Directory
.GetFiles(path, "*.dll", searchOption);
List<Assembly> assemblies = new List<Assembly>();
foreach (string relativePath in fileNames)
{
Assembly assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(Path.GetFullPath(relativePath));
assemblies.Add(assembly);
}
configuration = configuration.WithAssemblies(assemblies, conventions);
return configuration;
}
を可能な重複アプリケーションによって使用されるDLL](http://stackoverflow.com/questions/4887847/hot-unload-reload-of-a-dll-used-by-an-application) – Tobias
この問題の解決策は、 AppDomainクラスではありません。 asp.netコアでilable。 – jasdefer
'AppDomain'の横にアセンブリをアンロードする方法は他にありません。あなたのユースケースに応じて、あなたは難しい道を行くことができ、新しいプロセスをスピンアップし、WCFのようなものを使うことができます。 – thehennyy