如何在ASP.NET中动态插入网页(并更新插件)?
对于常规程序集,可以使用MEF动态加载程序集。如果这些程序集需要实时更新,建议使用AppDomains托管动态程序集(可能可以使用托管外接程序框架(MAF))。当需要更新时,将停止appdomain,更新程序集并重新加载appdomain ASP.NET加载的程序集中包含代码隐藏类,那么这些程序集又如何呢?如何在不强制重新启动主appdomain的情况下更新它们。是否可以在动态appdomain中托管我的一些页面?你会怎么做?此appdomain能否共享登录令牌和身份验证内容,以便用户不必重新登录如何在ASP.NET中动态插入网页(并更新插件)?,asp.net,mef,appdomain,maf,plugin-architecture,Asp.net,Mef,Appdomain,Maf,Plugin Architecture,对于常规程序集,可以使用MEF动态加载程序集。如果这些程序集需要实时更新,建议使用AppDomains托管动态程序集(可能可以使用托管外接程序框架(MAF))。当需要更新时,将停止appdomain,更新程序集并重新加载appdomain ASP.NET加载的程序集中包含代码隐藏类,那么这些程序集又如何呢?如何在不强制重新启动主appdomain的情况下更新它们。是否可以在动态appdomain中托管我的一些页面?你会怎么做?此appdomain能否共享登录令牌和身份验证内容,以便用户不必重新登
谢谢MEF不支持AppDomain隔离,所以不幸的是,即使在重新编译期间,以前加载的程序集仍然加载在主web应用程序AppDomain中。在ASP.NET中,您需要解决两件事:
MarshalByRef
,我认为这永远都不是一个干净的实现。也不确定如何触发用于在另一个AppDomain中动态编译页面的BuildProvider
实例- 在您的应用程序池有权访问的网站外创建文件夹
- 把你的新组件放进去
- 拥有一个任务/线程/Web服务,用于读取文件夹并将程序集加载到当前应用程序域
- Assembly.LoadFrom(字符串)
- 创建实例时,程序集的较新版本应优先
我猜你的问题是说这种方法不起作用?您得到了什么错误…简单地说,您的建议是只回收池,然后它将重新加载新程序集?我理解正确吗?一句话,是的。对于您来说,这似乎是一个令人失望的答案,但ASP.NET应用程序的设计就是以这种方式运行的。当您为应用程序规划功能集时,值得考虑您所设计的功能是否适用于最常见的用例。这有意义吗?我的想法是创建一个子web应用程序(嵌套web应用程序),以便可以循环使用子应用程序而不是父应用程序。你觉得怎么样?这可能是一个多一点的工作,但它确实给了我更多的灵活性,不是吗?