大型 asp.net 4 应用程序有一个非常奇怪的问题。IIS 有时不会从卷影副本位置加载模块,而是从 dll 最初来源的 bin 目录加载模块。
有谁知道 IIS 模块加载的工作原理以及这是正常行为还是错误?
这给我们带来的问题
- 在开发中;相应的 dll 被锁定在 bin 文件夹中,这意味着 msbuild 无法在构建时替换它。
- 这给我们带来了一个特别讨厌(而且很难找到)的问题(我们正在使用 hack 解决这个问题),我们在 nhibernate 查询中得到 TypeMismatchException
笔记
- 在 Win7 和 WinServer2008R2、IIS 7.5 上运行的 ASP.NET 4 应用程序,使用 MVC3、MVC4、WebForms、WebApi 的多个项目
- 通过附加 VS 调试器和检查加载的模块获取的模块信息
- 如果我 IISRESET 并清除 temp asp.net 文件夹,然后启动应用程序,则 dll 将全部复制到卷影副本位置,然后从那里加载。如果我然后再次 IISRESET 并启动应用程序,则模块将从 bin 位置而不是卷影副本位置加载
- 这只会影响 Web 项目的项目依赖项,入口点始终从卷影副本位置加载。IE Proj.Web将从卷影副本位置加载,该Proj.BusinessLogic和Proj.DataAccess的项目依赖项将从 bin 文件夹加载,外部依赖项(automapper、glimpse 等)将从卷影副本位置加载。
- 我们不会在代码、web.config 或 IIS 配置(默认设置)中覆盖任何应用程序池或应用程序域配置。
- 找不到详细记录模块加载或应用程序启动的任何地方。