是否有.NET中热插拔的参考实现?

我正在寻找在.NET中完成热交换的良好实现。 我需要的是:

  • 能够在特定文件夹中部署DLL并使用正在运行的系统来获取它们。
  • 让正在运行的系统更新容器中的相应引用。

我一直在研究MEF及其目录加载机制,但它似乎非常不可靠。 也许有人在那里有另一种实现方式?

您可以通过调用下面的newAppDomain()AssemblyResolve提供自定义事件处理程序。 提供您的目录,以便AppDomain在那里查看。 加载Type时,使用函数loadFromAppDomain()返回它。 这应该允许您在运行时将新dll复制到C:\dlls并从那里重新加载。 (原谅我,我根据你的标签将这个从我的VB源代码转换为C#。)

 String dllFolder = "C:\\dlls"; public void newAppDomain() { AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(assemblyResolve); } private static Assembly assemblyResolve(Object sender, ResolveEventArgs args){ String assemblyPath = Path.Combine(dllFolder, new AssemblyName(args.Name).Name + ".dll"); if(!File.Exists(assemblyPath)) { return null; } else { return Assembly.LoadFrom(assemblyPath); } } private Type loadFromAppDomain(String className) { Assembly[] asses = AppDomain.CurrentDomain.GetAssemblies(); List types = new List(); foreach(Assembly ass in asses) { Type t = ass.GetType(className); if(t != null) types.Add(t); } if(types.Count == 1) return types.First(); else return null; }