聊天时, 一个朋友告诉我说他的客户遇到过一个很奇怪的问题. 在研发人员的开发环境上运行一切正常的自定义web part, master page等等, 在客户的环境上怎么都跑不起来. 报错. 拿过来到自己的测试环境上部署都OK. 最后用一个叫fusion log的东西把问题解决了.
因为客户的生产环境上比较干净, 安装的东西少, 而开发的机器还有测试环境上都装备齐全, 运行起来啥也不缺. 那么究竟是缺了什么东西导致这个问题的呢? 在C++中, 有个叫dependency walker的东东可以试试. 它会将你的exe依赖于哪些dll列出来. 那么.NET的程序咋整? Fusion Log大显身手罗. 它可以将.net程序运行时加载其他dll的过程一一记录下来. 朋友开启这个日志之后, 发现CLR在寻找一个.net framework的dll. 一看是.NET framework 3.5的某个dll.
到这里就明白应该安装.net framework 3.5来解决问题了. 这可是典型的MOSS开发至多是.net framework 3.0呀.
反汇编看过客户的代码, 发现其中有using System.Linq; 这样的语句. 原来客户的开发人员用的是vistual studio 2008做的开发, 没注意由VS2008自动添加的这条语句. 导致程序试图加载.net framework 3.5. 呵呵.
关于fusion log, 请参考
Understanding The CLR Binder