我写了一些代码:
public interface IPlugin
{
string Name { get; set; }
}
ClassLibrary1.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()? 哪个导出类型存在于哪个程序集('s路径)中。