我正在寻找在 .NET 中完成热交换的良好实现。我需要的东西是:
- 能够将 DLL 部署到特定文件夹中并让正在运行的系统拾取它们。
- 让正在运行的系统更新容器中的相应引用。
我一直在研究MEF及其目录加载机制,但它似乎非常不可靠。也许有人有替代的实现?
您可以提供自定义事件处理程序AssemblyResolve
通过致电newAppDomain()
以下。提供你的目录AppDomain
看起来在那里。加载类型时,使用函数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<Type> types = new List<Type>();
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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)