1

我写了一些代码:

public interface IPlugin
{
    string Name { get; set; }
}

类库1.dll

public class Class1 : IPlugin
{
    public string Name { get; set; } = "Hamed Fathi";
}

和一个控制台:

public static void Main(string[] args)
{
    var dir = @"PLUGIN DIRECTORY PATH";

    //Load Assemblies
    var files = Directory.EnumerateFiles(dir, "*.dll", SearchOption.TopDirectoryOnly);
    var assemblies = new List<Assembly>();
    foreach (var file in files)
        assemblies.Add(AssemblyLoadContext.Default.LoadFromAssemblyPath(file));

    //MEF2
    var conventions = new ConventionBuilder();
    conventions
        .ForTypesDerivedFrom<IPlugin>()
        .Export<IPlugin>()
        .Shared();
    var configuration = new ContainerConfiguration()
        .WithAssemblies(assemblies, conventions);
    var container = configuration.CreateContainer();
    var plugins = container.GetExports<IPlugin>().ToList();

    Console.ReadKey();
}

我想使用 FileSystemWatcher 来观察插件文件夹中的任何更改,因此我应该可以更改/删除/重命名/创建任何 dll。

所以我有3个问题:

1.当我根据上述代码加载程序集时,我无法更改/删除插件文件夹中的任何 dll。在 .NET Framework 中,我可以使用 AppDomain 和 ShadowFolder 来创建分离的上下文。

由 MEF2 加载时是否有操作 dll 的方法?

在此处输入图像描述

2. MEF2 是否有重新加载/刷新/重新获取程序集的方法?

3.无论如何我找到了一对程序集的路径和 GetExports()吗?哪些导出类型存在于哪个程序集(路径)中。

4

0 回答 0