昨天没有事,就想实验一下.NET1.1到.NET2.0的兼容性如何,我从
http://bbs.hidotnet.com下在了CS,一个比较有名的论坛,转换过程很顺利,但是运行后发现了问题:类似如下:
protected System.Web.Profile.DefaultProfile Profile {
Line 210: get {
Line 211: return ((System.Web.Profile.DefaultProfile)(this.Context.Profile));
请注意错误位置:
c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\forums\9ef6037b\2a750bf2\App_Web_
skin-navigationmenu.ascx.
很明显,打开该文件可以发现定义了一个ID为Profile的控件,Profile在ASP.NET1.1里并无特殊意思,但是到V2.0就是存储用户档案,具有内在的意思. 由于该文件只是定义一个架子,所以更改其ID为其他值,例如Profile1就可以了.
接下来运行很好,正在我赞扬ASP.NET2.0做的好的时候,结果问题来了,在我进入后台管理面版后,出现如下错误:
法将类型为“MetaBuilders.WebControls.MasterPages.Region”的对象强制转换为类型“AspNetForums.Admin.ForumAdmin”。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.InvalidCastException: 无法将类型为“MetaBuilders.WebControls.MasterPages.Region”的对象强制转换为类型“AspNetForums.Admin.ForumAdmin”。
源错误:
源文件: c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\bbs\5122bee7\c88c93a5\App_Web_5m1vozlj.19.cs 行: 0
从提示内容看,是Region出错,遗憾的是:这是一个第三方组建,所以我们并不能够修改其代码,稍微熟悉ASP.NET2.0的人应该都能够感觉,这个控件其实就是ASP.NET2.0里的MasterPage (母板).
查看一下代码就设计两个文件,我写了三个页面,供大家修复这个bug
单击下载这三个文件
/Files/mqingqing123/fixcsbug.rar
下载后可以发现一个是ForumAdmin.aspx, 用该文件覆盖原CS的admin目录下的ForumAdmin.aspx文件,ForumGroupAdmin.aspx覆盖ForumGroupAdmin.aspx
另外一个是AdminMasterPage.master,把他拷贝到CS的Themes目录下,你也不用重新编译,就能够修复这个问题.
另外,运行后还发现一个问题:Popupbox.dll也不好用. 由于Popupbox是基于.NET1.1,现在这个问题还不好解决,一个简单的方法是直接删除该pop.aspx 文件,不用该控件.
从上面可以看到,ASP.NET1.1转换到ASP.NET2.0一般没有问题,但是在转换第三方控件时,问题多多.
本文相关代码
/Files/mqingqing123/fixcsbug.rar