ASP.NET 4.0 升级中遇到的小麻烦

1、如何指定IIS虚拟目录(应用程序)的框架版本

如果是iis6,比较简单,在属性页上直接指定即可,可在iis7上,却找不到如何指定版本的功能,费了不少周折,才发现,iis7是按应用程序池来指定版本的,在建立虚拟目录时指定。

2、Duplicate type name within an assembly

首先说明,程序的运行环境使用了Castle 1.0rc框架。这个错误出的很莫名其妙,也没有明确的指示。只是提示是在NHibernate初始化类型时出错,具体是哪个类型,也没有明确的提示。开始怀疑真的是自己的类名重复了,但编译可以通过,经仔细检查,也没有发现有重复命名的实体类,百思不得其解,于是google一下,发现有不少类似的问题,多数人说是Castle.DynamicProxy.dll的bug,由于后来这个文件升级到了Castle.DynamicProxy2.dll,而我使用的Castle 1.0rc3 使用的是旧版本的,不敢直接替换。

这些信息启发下,找到了问题的根源,应该是NHibernate使用Castle.DynamicProxy来生成实体类,但Castle.DynamicProxy的旧版本在ASP.NET 4.0下工作有问题。

找到问题,解决就比较容易了,直接把应用程序池设置回asp.net 2.0,一切OK。

看来这个项目只能工作在asp.net 2.0下了。

使用开源项目风险还是蛮大的,由于asp.net mvc的推出,Castle Project 很久没更新了,可能不再集中打包发布新版本了,因为各个模板都单独发行了新版本,而兼容性如何需要自己来测试,因此要升级恐怕要费一番周折,已经稳定运行的项目,也不想折腾了,但由于需要不停地在上面添加新功能,因为这部分功能受限造成不能使用asp.net 4.0,也觉得很别扭。

如果一个项目需要持续性开发扩展,或是产品类项目,还是老老实实使用官方原生的基本技术比较好,风险可控,不会绑定到人家的产品上,推荐webform+ado.net。