asp.net – 在Web.config更改后程序集不可用
我正在使用一个自定义框架,该框架使用反射对从数据库获取的完全限定类型名称执行GetTypeByName(字符串fullName),以创建所述类型的实例并将其添加到页面,从而生成标准模块化的东西.
GetTypeByName是我的一个实用函数,它简单地遍历Thread.GetDomain().GetAssemblies(),然后执行一个assembly.GetType(fullName)来查找相关类型.显然,这个结果会被缓存以供将来参考和使用. 但是,我遇到了一些问题,如果web.config得到更新(并且在某些更可怕的实例中,如果应用程序池被回收)那么它将失去对某些程序集的所有知识,从而导致无法呈现模块类型.调试显示当前线程程序集列表中不存在缺少的程序集. 为了解决这个问题,我添加了第二个检查,它有点脏,但通过/ bin /目录的DLL进行递归,并检查程序集列表中是否存在每个DLL.如果没有,则使用Assembly.Load加载它并通过‘Solving the Assembly Load Context Problem’修复上下文问题. 这可行,只是看起来(并且我知道这不可能)一些项目仍然可以访问缺少的程序集,例如我的实际Web项目而不是框架本身 – 然后它会抱怨重复的引用已被添加! 有没有人听说过这样的事情,或者有任何想法为什么一个程序集在配置更改时根本不存在?如果没有一个解决方案,那么让bin中的所有程序集重新加载的最优雅的解决方法是什么?它需要全部在一个“命中”,以便网站访问者除了一个小延迟之外看不到任何差异,因此app_offline.htm文件是不可能的.以编程方式重命名bin中的DLL,然后将其命名回来确实有效,但需要IIS用户帐户的“修改”权限,这是疯了. 感谢社区可以收集的任何指示! 解决方法
通常,您应该避免依赖于当前在appdomain中加载的程序集,因为这是动态发生的.相反,只需调用System.Web.Compilation.BuildManager.GetType()而不是Type.GetType()或Assembly.GetType().这应该为您做正确的事情,而不受appdomain周期的影响.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – Facebook API – 签名请求无效. (签名无效.)
- .net中如何获取机器硬件信息(防软件复制版)
- asp.net-mvc – ASP.NET身份登录
- asp.net – 提供的URI方案’https’无效;预期’http’.参数
- IIS和ASP.NET中的时间差异
- asp.net – Microsoft.Office.Interop.Excel在64位上不起作
- DevExpress v17.2新版亮点—ASP.NET篇(三)
- ASP.NET MVC 微信公共平台开发之获取用户消息并处理
- asp.net-mvc – 用于KendoUI AutoComplete的开箱即用的MVC
- ASP.NET页面动态添加js脚本
- asp.net – 如何自定义UseExternalSignInCookie?
- asp.net-mvc – 如何在ASP.NET MVC中创建旋转广告
- 如何使用ASP.NET Core创建多部分HTTP响应
- asp.net – 在.NET中使用TinyMCE有一种简单的Spe
- 嵌套的ASP.NET’应用程序’在IIS内继承父配置值?
- asp.net – Response.Redirect导致IsPostBack为t
- asp.net-mvc – 从DataAnnotations MVC 3向字段添
- asp.net – 没有有效的报告来源 – 水晶报告
- asp.net – 如何判断正在查看的网站位置?
- asp.net-core – project.json中的框架和导入部分