Vs2003升级到VS2008过程记录

VS2003,我已经不能再忍受你了,我每修改我项目的文件内容,CS内容全变为灰色的,我没有办法工作.现在我决定离开你,使用Vs2008.

我试过十次转向到VS2008,但是每次都是失败结束,这次,我一定不能再失败,我已经不能接受这样的结果.

说明一下,这个项目比较大。编译好后,DLL有几M。三层架构,有Web Service 也有Remoting,分布式的系统,要和十多个不同的企业的系统对接。

升级的目的是提高开发效率,但是我又不想做太多的升级工作.因为这个项目有几十个不同的企业在用,十多万的用户,每个企业都有一些个性化的PAGE,我不可能去每个PAGE做相应的修改.所以成功的升级标准是:

1、PAGE页面不能因为升级做任何人工的修改。页面太多了,如果升级后,需要修改的话,工作量太大。
2、升级后,程序要能正常运行。

3、由于部份程序由于历史原因不可能转换。所以VS2008下的2.0版本的内容必须和1.1版本的程序仍像以前一样,能互相调用(Web Service)。

首先我选择了最新的VS2008+SP1.以前都是在VS2008下,没有用最新的SP,这次改进一下.

系统的转换非常的顺畅,一次性通过。

编译的时候,系统报了错误,

1、是一个从Decimal自动转换为int类型的数据。在VS2008下面,需要明确指定。

2、页面以前定义为 AutoEventWireup="false",现在 AutoEventWireup="false"则页面事件不能正常运行。必须所有的页面调整为 AutoEventWireup="True" ,这个可以采用一个程序统一调整。 

处理后OK。

系统测试没有问题,上线。

部份模块上线后麻烦就来了,太大的麻烦了。

 

客户打电话来说以前从远程服务器获取的网页能正常显示,但是现在不能显示了,显示为乱码。

调试再调试,发现是WebClient的编码问题,以前WebClient获取的远程PAGE的Encoding是GB2312,现在变成了ISO-XXXXX的。估计是.Net的Bug。因为远程网页确实是GB2312.调整编码后,页面显示正常。

系统又发现,以前从远程获取的图片现在不能正常显示了(WebRequest)。从上面的BUG的解决经验来看,判定为编码问题,调了N个编码,还是不能解决,然后把该图片保存到文件,用IE打开,也不能显示。最后步进、再步进,原来Webrequest读内容,以前可以一次读出指定大小的字节,现在一次没有完整读出内容,比我指定的内容要少,所以获取的图片是不完整的,就不能正常显示。

以前的代码:

oWebByte=new byte[k];
    try
    {
     int l=oReader.Read(  oWebByte,0,k )  ;  
    }
    catch(System.Exception oError)
    {
      //....
    }

现在的代码

oWebByte=new byte[k];
                int l = 0;
                int m = 0;
                while (k > 0)
                {
                    try
                    {
                       l = oReader.Read(oWebByte, m, k);
                    }
                    catch (System.Exception oError)
                    {

                           //.........

                    }
                    if (l == 0)
                    {
                        break;
                    }
                    m = m + l;
                    k = k - l;

                }

 

现在又发现了新的问题,某个页面总是报验证视图状态 MAC 失败,分析发现,这个页面以前的内容是

在激发页面事件后,自动转向到第二个页面。但以前在VS2003中,没有转到第二个页。所以在第二个页面就会提示Mac出错。

删除action的内容。在测试环境正常,但是在生产环境还有问题。

页面事件差异:

以前定义事件方式:

>

现在变成新的类型:

onselectedindexchanged="Type_SelectedIndexChanged">

所以,以前页面事件可以激活,现在如果页面没有指定onselectedindexchanged,则页面转向到第二个网页去了.

这个对系统升级影响比较大.会有比较多的页面修改.(工作量应该可以忍受)

估计在正式上线后,由于最后一个问题的原因,会引发很多模块不能正常工作。(麻烦)

总体看,这次升级应该可以成功。

新的问题:

System.Net.HttpWebResponse oResponse= (System.Net.HttpWebResponse)oWebRequest.GetResponse();
   System.IO.BinaryReader   oReader=null;
   
   if(oResponse.ContentEncoding.ToUpper().Replace("-","").IndexOf("UTF8")>-1||oResponse.CharacterSet.ToUpper().Replace("-","").IndexOf("UTF8")>-1)
   {
    oReader=new System.IO.BinaryReader(oResponse.GetResponseStream(),System.Text.Encoding.UTF8); 
   }
   else
   {
    oReader=new System.IO.BinaryReader(oResponse.GetResponseStream(),System.Text.Encoding.Default); 
   }

这段代码在.Net 1.1下运行正常,在.Net 2.0下不能正常运行,原因是oResponse.CharacterSet以前如果为空返回的是"",现在为null

修改为

System.Net.HttpWebResponse oResponse= (System.Net.HttpWebResponse)oWebRequest.GetResponse();
   System.IO.BinaryReader   oReader=null;
   
            if(!String.IsNullOrEmpty( oResponse.CharacterSet))
            {
                if(oResponse.CharacterSet.ToUpper().Replace("-","").IndexOf("UTF8")>-1)
                {
                    oReader=new System.IO.BinaryReader(oResponse.GetResponseStream(),System.Text.Encoding.UTF8); 
                }
            }
            else
            {
       if(oResponse.ContentEncoding.ToUpper().Replace("-","").IndexOf("UTF8")>-1)
       {
        oReader=new System.IO.BinaryReader(oResponse.GetResponseStream(),System.Text.Encoding.UTF8); 
       }
       else
       {
        oReader=new System.IO.BinaryReader(oResponse.GetResponseStream(),System.Text.Encoding.ASCII); 
       }

            }

这些问题主要还是自己以前编码是考虑不周引起的.升级也可以找到一些没有显示 出来的BUG

你可能感兴趣的:(Vs2003升级到VS2008过程记录)