【发布时间】:2014-08-30 02:35:27
【问题描述】:
在大型 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 配置(默认设置)中覆盖任何应用程序池或应用程序域配置。
- 找不到详细记录模块加载或应用启动的任何位置。
【问题讨论】:
-
感谢@Ma_Khan 的回复,遗憾的是我在 FR 跟踪日志中找不到任何有用或相关的内容。我已经完全打开了跟踪,它提供了有关已加载的 iis 模块和/或 http 处理程序的详细信息,但不是作为应用程序一部分的普通旧 dll
-
我也有同样的问题 - 很奇怪。
-
@JamesWilkins 我们发现了我们的问题,也许你有类似的情况,在下面添加了一个答案。希望对您有所帮助。
标签: asp.net dll iis-7 shadow-copy