我最近几天一直在和IIS打架,IIS产生的错误是:
exception:System.Runtime.Serialization.SerializationException
消息:无法find程序集'FluentNHibernate,版本= 1.0.0.633,文化=中立,PublicKeyToken = 8aa435e3cb308880'。
奇怪的是,如果我检查procmon,我可以看到IIS进程在我期望它find它的目录中finddll,然后继续search其他目录中完全相同的dll。 它也在寻找DLL的某些原因的PDB。 该DLL也存在于IIS创build的临时目录中:
C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET Files \ ws-sm \ bc2df7a7 \ 729516d \ assembly \ dl3 \ 42ab9d3b \ 00d491a3_3e6bcd01 \ FluentNHibernate.DLL
所以它显然能够将dll复制到它的运行位置,但它报告找不到它。
我检查了所有的web.config文件,编译debugging在所有情况下设置为false,所以我很惊讶地看到它寻找pdbs。
谷歌search这个错误没有返回任何有用的东西。
我正在使用IIS 7的Win2k8 x86,我的应用程序池是ASP.NET v4.0集成的。
这是一个典型的.NET故障排除问题。
几件事情:
我肯定会确保Fluent NHibernate DLL的版本与软件预期运行的版本相匹配。 您可能需要联系开发人员/供应商,以澄清问题。 这很可能不是一个IIS问题,而是一个应用程序问题。
我终于弄明白了,这与IIS无关。 张贴我的答案,以防其他人在未来出现类似的问题。
最后导致我的问题是,我无法连接到我的一个数据库,这导致了一个exception被抛出。 不知何故(还不知道如何),这是被一件事情抓住,然后被IIS试图序列化一个错误消息,但它找不到一个DLL,因为它最终捕捉到它在另一个AppDomain中。 我最终发现这个问题,将windbg附加到w3wp进程并观察它启动。
所以,如果你得到这个错误,请尝试将windbg附加到你的进程,看看是什么错误被抛出。