对于大型asp.net 4应用程序有一个非常奇怪的问题。 IIS有时会加载模块,而不是从卷影副本位置加载,而是加载dll最初来源的bin目录。
有谁知道IIS模块加载如何工作以及这是正常行为还是错误?
这导致我们的问题
备注
答案 0 :(得分:1)
几个星期前发现了这个问题的根本原因,现在发布,希望能帮助任何类似的人。
在我们的一些开发人员中发现了几个小时之后,我们发现这是由于我们正在扫描用于nhibernate配置的dll的方式而自行造成的。
当我们从代码中明确加载dll时,我们误用了Assembly
辅助方法。我们使用Assembly.LoadFrom(assemblyPath)
而不是Assembly.LoadFile(assemblyPath)
。这些方法之间存在许多差异,这里相关的是LoadFile()
加载指定的文件,而LoadFrom()
将应用逻辑从其他位置(如temp,cache或GAC)查找程序集。有关差异的详细信息,请参阅this question。
无论如何,在改变这一行代码之后,我们所有的问题都消失了。