我写了一些代码:
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()吗?哪些导出类型存在于哪个程序集(路径)中。