2016-09-08 9 views
0

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; 
} 
+0

を可能な重複アプリケーションによって使用されるDLL](http://stackoverflow.com/questions/4887847/hot-unload-reload-of-a-dll-used-by-an-application) – Tobias

+0

この問題の解決策は、 AppDomainクラスではありません。 asp.netコアでilable。 – jasdefer

+0

'AppDomain'の横にアセンブリをアンロードする方法は他にありません。あなたのユースケースに応じて、あなたは難しい道を行くことができ、新しいプロセスをスピンアップし、WCFのようなものを使うことができます。 – thehennyy

答えて

0

var conventions = new ConventionBuilder(); 
    conventions 
     .ForTypesDerivedFrom<IPluginContract>() 
     .Export<IPluginContract>() 
     .Shared(); 

    var configuration = new ContainerConfiguration().WithAssembliesInPath(path, conventions); 

    using (var container = configuration.CreateContainer()) 
    { 
     var plugins = container.GetExports<IPluginContract>(); 
     return plugins; 
    } 

:私は実装にアクセスするには、コントローラに次のコードを使用しますつまり、あなたのプロセスは停止しています)、dllの処理はありません。

ご希望の機能に到達する方法についての言及については

既に回答されているこれらの質問を見てくださいの[ホットアンロード/リロードの

+0

しかし、彼らは 'AppDomain'クラスに頼っています。私が間違っていなければ、asp.netコアでは利用できません。 – jasdefer

関連する問題