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 Membership中手动更改用户名
- .net – HttpHandler在IIS 7中不起作用
- asp.net-mvc – HttpResponse.RemoveOutputCacheItem不工作
- asp.net app中的会话变量超时
- asp.net – 如何使用输出缓存.ashx处理程序
- asp.net-mvc-3 – 具有MVC属性的IoC / DI
- .net – ListView中Bind语句中的格式化日期
- asp.net – 不明确的引用问题(Microsoft.AspNet.Identity和
- asp.net 分页显示数据表的数据的代码
- asp-classic – 如何将字符串转换为日期时间格式的经典asp
- asp.net-mvc – 用ASP.NET MVC实现MEF?
- asp.net-mvc – ASP.NET MVC 4 Visual Studio 20
- asp.net-mvc – 如何在ASP.net MVC 4 RouteConfi
- ASP.NET批量下载文件的方法
- .net – ListView中Bind语句中的格式化日期
- asp.net – 如何解决“最大请求长度超出”异常?
- ASP.NET编译器抱怨MiniProfiler不匹配的框架版本
- asp.net-mvc – 使用IIS7.5将网站中的URL绑定到另
- asp.net-mvc – ASP.NET MVC UpdateModel容易受到
- asp.net-mvc – jQuery Mobile和不显眼的验证
