VS2003 转 VS2005 个别问题解决办法
Asp.net项目从Vs2003转换到Vs2005的常见问题大全及解决方法
我下了很多基于VS2003(以及VS2002)的Asp.net的Demo。而我用的是VS2005,我在使用这些Demo时,基本上绝大部分基 于VS2003的Asp.net工程都因为少数文件无法转换而无法加载工程,我也为些郁闷了好久,后来终于让我找到了解决办法:
Asp.net基于VS2005的工程与以往版本的工程的最大区别就是用分部类(partial)取代了代码隐藏(Codebehind)。
于是我采取的方法是:
1. 用打开网站的方式打开这个工程。这样VS2005也会进行转换,而且也会报错,但与直接打解决方案无法加载不同的是,这一次它展开了网站的所有文件。如果你现在运行工程,也不会成功的。
2. 打开filename.aspx文件到源代码视图,将@Page指令中的属性“Codebehind”改为“CodeFile”,
3. 将与这对应的Codebehind文件filename.aspx.cs,将继承于System.Web.UI.Page的类定义class前加上partial关键字。
4. 运行该工程,它会提示你在filename.aspx中已经包含controlname的定义,跟踪错误到filename.aspx.cs,将那些被指示错误的重复定义删去。51aspx
5. 然后重复2-4步直至所有的文件都改过来,再运行工程应该就可以运行成功了。不过也许会报几个警告说某某已经过时,不用去管它。
我用这个方法将那些老顽固(包括2003以及2002的工程)都成功转换了,真的是屡试不爽。这只不过是我自己总结出来的方法,也许有人有更好的办法,如果有更好的方法也请指点。
vs2005可以很方便的帮我们把vs2003开发的asp.net1.1版本项目升级到vs2005开发的asp.net2.0版本,从vs2005里面打开vs2003的解决方案或者项目文件,会有向导帮我们自己完成升级工作。一部分asp.net1.1的项目做完这个工作就足够了。
不过更多的时候不会这么顺利,还要注意一些问题:
注意:建议VS2005要打Sp1补丁包,否则不能转换webAppliction项目文件
Asp.net基于VS2005的工程与以往版本的工程的最大区别就是用分部类(partial)取代了代码隐藏(Codebehind)。
于是我采取的方法是:
1. 用打开网站的方式打开这个工程。这样VS2005也会进行转换,而且也会报错,但与直接打解决方案无法加载不同的是,这一次它展开了网站的所有文件。如果你现在运行工程,也不会成功的。
2. 打开filename.aspx文件到源代码视图,将@Page指令中的属性“Codebehind”改为“CodeFile”,
3. 将与这对应的Codebehind文件filename.aspx.cs,将继承于System.Web.UI.Page的类定义class前加上partial关键字。
4. 运行该工程,它会提示你在filename.aspx中已经包含controlname的定义,跟踪错误到filename.aspx.cs,将那些被指示错误的重复定义删去。51aspx
5. 然后重复2-4步直至所有的文件都改过来,再运行工程应该就可以运行成功了。不过也许会报几个警告说某某已经过时,不用去管它。
我用这个方法将那些老顽固(包括2003以及2002的工程)都成功转换了,真的是屡试不爽。这只不过是我自己总结出来的方法,也许有人有更好的办法,如果有更好的方法也请指点。
vs2005可以很方便的帮我们把vs2003开发的asp.net1.1版本项目升级到vs2005开发的asp.net2.0版本,从vs2005里面打开vs2003的解决方案或者项目文件,会有向导帮我们自己完成升级工作。一部分asp.net1.1的项目做完这个工作就足够了。
不过更多的时候不会这么顺利,还要注意一些问题:
- vs2003开发的asp.net1.1程序,不会检查aspx、aspcx等文件中的语法错误51aspx,而vs2005会检查项目中所有的aspx、aspcx等文件中的语法,所以如果有语法错误,会导致编译无法通过。
- vs2003中,如果用的是默认的代码绑定方式,那么在aspx文件(以aspx文件为例,ascx文件也有这个问题)中申明的服务器端控件,会在aspx文件对应的aspx.cs文件中,生成一个对应的申明,例如aspx中有一个TextBox,ID是MyTextBox,那么在aspx.cs中,会申明一个"protected TextBox MyTextBox;",而在vs2005中,这个申明是多余的,所以升级后要去除这些多余的申明。
- 如果有程序采用了asp.net1.1下的Membership——使用MemberRole.dll,要升级到asp.net2.0下的Membership,需要做如下工作:[list]
- 删除所有项目中对"MemberRole.dll"的引用,添加"System.Configration"的引用
- 改变命名空间ScalableHosting.Profile -> System.Web.Profile;ScalableHosting.Security -> System.Web.Security; 同时添加using System.Configuration; 51aspx.com
- 移除所有MemberRole.dll相关的Membership配置,参照以前的Membership配置,增加asp.net2.0支持的Membership配置,更新Membership的存储过程。
注意:建议VS2005要打Sp1补丁包,否则不能转换webAppliction项目文件
今天在测试一个项目的时候,是用vs2003开发的,在用vs2005打开的时候,首先进行了代码转化,用原来的net1.1转化为net2.0,项目开发的时候,采用了IEwebControl控件实现收缩菜单,在开发的时候网页中都引用了 Microsoft.Web.UI.WebControls;和System.Web.UI.WebControls; 在net1.1组建下System.Web.UI.WebControls不支持IEWebControl,但是在net2.0的时候System .Web.UI.WebControls支持该控件了,这样的话在网页中就同时引用了该控件,在引用的时候就会导致 TreeNode引用不明确,从而使项目编译不成功,相信好多的朋友都会遇到过此种情况吧,一位大师说在引用的时候写完整他,除了没别的方法,可我写完整了编译还是出错,难道是我写错了吗,我把代码贴出来,跟大家交流交流,愿高手给指点迷津,
注:任意带TreeNode都会提示错误,我任意找了一个文件的代码,整个 Department.ascx.cs文件
namespace OI.UserControls
{
using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using Microsoft.Web.UI.WebControls;
using OI.DatabaseOper ;
/// <summary>
/// Department 的摘要说明。
/// </summary>
public partial class Department : System.Web.UI.UserControl
{
private DatabaseConnect dc;
protected void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
dc=new DatabaseConnect ();
if(!this.IsPostBack )
{
this.CreateDataSource ();
DarentmentList.SelectedNodeIndex ="0";
}
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器
/// 修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
}
#endregion
public int DEPT_ID
{
get
{
return Convert.ToInt32 (DarentmentList.GetNodeFromIndex (DarentmentList.SelectedNodeIndex ).ID.Trim () );
}
}
public string DEPT_NAME
{
get
{
return DarentmentList.GetNodeFromIndex (DarentmentList.SelectedNodeIndex ).Text;
}
}
private void CreateDataSource()
{
DarentmentList.Nodes .Clear ();
TreeNode node=new TreeNode ();
node.Text ="开始";
node.ID ="0";
CreateDataSource("0",ref node);
DarentmentList.Nodes .Add (node);
}
private void CreateDataSource (string Parentid, ref TreeNode Pnode)
{
string sql ="SELECT DepartmentId,DepartmentName,IsPublic FROM departments WHERE ParentDepartmentID='"+Parentid+"'";
DataSet ds;
ds=dc.getBinding (sql,"s11");
foreach (DataRow dr in ds.Tables["s11"].Rows )
{
//TreeNode node=new TreeNode ();
Microsoft.Web.UI.WebControls.TreeNode node = new Microsoft.Web.UI.WebControls.TreeNode();
node.Text =dr["DepartmentName"].ToString ();
node.ID =dr["DepartmentId"].ToString ();
/*
if (dr["menupath"].ToString () !="")
{
node.NavigateUrl=dr["menupath"].ToString ();
node.Target ="main";
}*/
if(Convert.ToBoolean (dr["IsPublic"].ToString ().Trim ()))
{
CreateDataSource(dr["DepartmentId"].ToString (),ref node);
Pnode.Nodes .Add(node);
}
}
}
}
}
VS2003 向 VS2005 过渡的问题
我使用ASP.NET已经3年了,刚开始是使用手动编写,后来使用 VS2003,又从 .NET Framework 1.0 升级至 1.1 ,一直都没有问题。
这段时间,由于要开发手机应用,准备从 VS2003 向 VS2005 过渡。在没有看过两者有什么区别前,我就尝试将原来的 VS2003的项目转换成VS2005的项目。转换结束后,出现了一大堆的错误,而且很多文件都导不进vs2005的项目中。经仔细研究后发现,我的程序.aspx 文件中引用了Web控件,在.cs文件中申明为 public ,但他要求是 protected。如:
我申明为: public Label ctlMsg; (申明为 public 是个不好的习惯)
正确的应该是: protected Label ctlMsg;
所以在转换项目前,要先把所有申明为 public 的控件修改为 protected ,再转换,否则这个文件就无法导入到项目中。
当我把所有申明为 public 的控件修改为 protected 后,转换成功了。我在VS2003中看了一下项目,所有文件都转换过来了。
本以为可以正常使用了,我正高兴地去编译程序,又发现无法编译通过,出了很多错误。
错误1:Validation (Internet Explorer 6): .....................
说明:网页的Html代码不符合规范,如: <table>[color=#ff0000]<form><tr></tr></form></table>
解决: 菜单 Tools => Options => Text Editor => HTML => Validation 取消 [/color]Show Errors
错误2:Error 1 Missing partial modifier on declaration of type 'Index'; another partial declaration of this type exists D:\root\http://www.5xsoft.com/\Index.aspx.cs 12 14 D:\root\http://www.5xsoft.com/\[color=#000000]
说明:从网页中继承出来的类的要加上 [color=#ff0000]partial 申明
如 [font=Verdana]public class Index : System.Web.UI.Page
解决:加上 partial 如 public partial class Index : System.Web.UI.Page[/color][/color][/font]
[color=#000000][font=Verdana][color=#0000ff][color=#000000] 错误3:[font=Verdana]Error 1 The type 'ZSWeb.Article' already contains a definition for 'ctlTitle' D:\root\http://www.5xsoft.com/\Article.aspx.cs 20 25 http://localhost/www.5xsoft.com/
[color=#000000]说明:VS2003中,使用Web控件要在.cs中申明后才能使用,但在 VS2005中默认不能申明。
解决:删除.cs文件中的 Web 控件声明。如删除 [font=Verdana]protected Label ctlTitle;
小结:其实这里,我绕了一个圈,在转换项目前,直接把 Web 控件声明删除掉,就不会有错误3出现了。[/color][/font]
[/color][/font][/color][/color][/font]
注:任意带TreeNode都会提示错误,我任意找了一个文件的代码,整个 Department.ascx.cs文件
namespace OI.UserControls
{
using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using Microsoft.Web.UI.WebControls;
using OI.DatabaseOper ;
/// <summary>
/// Department 的摘要说明。
/// </summary>
public partial class Department : System.Web.UI.UserControl
{
private DatabaseConnect dc;
protected void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
dc=new DatabaseConnect ();
if(!this.IsPostBack )
{
this.CreateDataSource ();
DarentmentList.SelectedNodeIndex ="0";
}
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器
/// 修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
}
#endregion
public int DEPT_ID
{
get
{
return Convert.ToInt32 (DarentmentList.GetNodeFromIndex (DarentmentList.SelectedNodeIndex ).ID.Trim () );
}
}
public string DEPT_NAME
{
get
{
return DarentmentList.GetNodeFromIndex (DarentmentList.SelectedNodeIndex ).Text;
}
}
private void CreateDataSource()
{
DarentmentList.Nodes .Clear ();
TreeNode node=new TreeNode ();
node.Text ="开始";
node.ID ="0";
CreateDataSource("0",ref node);
DarentmentList.Nodes .Add (node);
}
private void CreateDataSource (string Parentid, ref TreeNode Pnode)
{
string sql ="SELECT DepartmentId,DepartmentName,IsPublic FROM departments WHERE ParentDepartmentID='"+Parentid+"'";
DataSet ds;
ds=dc.getBinding (sql,"s11");
foreach (DataRow dr in ds.Tables["s11"].Rows )
{
//TreeNode node=new TreeNode ();
Microsoft.Web.UI.WebControls.TreeNode node = new Microsoft.Web.UI.WebControls.TreeNode();
node.Text =dr["DepartmentName"].ToString ();
node.ID =dr["DepartmentId"].ToString ();
/*
if (dr["menupath"].ToString () !="")
{
node.NavigateUrl=dr["menupath"].ToString ();
node.Target ="main";
}*/
if(Convert.ToBoolean (dr["IsPublic"].ToString ().Trim ()))
{
CreateDataSource(dr["DepartmentId"].ToString (),ref node);
Pnode.Nodes .Add(node);
}
}
}
}
}
VS2003 向 VS2005 过渡的问题
我使用ASP.NET已经3年了,刚开始是使用手动编写,后来使用 VS2003,又从 .NET Framework 1.0 升级至 1.1 ,一直都没有问题。
这段时间,由于要开发手机应用,准备从 VS2003 向 VS2005 过渡。在没有看过两者有什么区别前,我就尝试将原来的 VS2003的项目转换成VS2005的项目。转换结束后,出现了一大堆的错误,而且很多文件都导不进vs2005的项目中。经仔细研究后发现,我的程序.aspx 文件中引用了Web控件,在.cs文件中申明为 public ,但他要求是 protected。如:
我申明为: public Label ctlMsg; (申明为 public 是个不好的习惯)
正确的应该是: protected Label ctlMsg;
所以在转换项目前,要先把所有申明为 public 的控件修改为 protected ,再转换,否则这个文件就无法导入到项目中。
当我把所有申明为 public 的控件修改为 protected 后,转换成功了。我在VS2003中看了一下项目,所有文件都转换过来了。
本以为可以正常使用了,我正高兴地去编译程序,又发现无法编译通过,出了很多错误。
错误1:Validation (Internet Explorer 6): .....................
说明:网页的Html代码不符合规范,如: <table>[color=#ff0000]<form><tr></tr></form></table>
解决: 菜单 Tools => Options => Text Editor => HTML => Validation 取消 [/color]Show Errors
错误2:Error 1 Missing partial modifier on declaration of type 'Index'; another partial declaration of this type exists D:\root\http://www.5xsoft.com/\Index.aspx.cs 12 14 D:\root\http://www.5xsoft.com/\[color=#000000]
说明:从网页中继承出来的类的要加上 [color=#ff0000]partial 申明
如 [font=Verdana]public class Index : System.Web.UI.Page
解决:加上 partial 如 public partial class Index : System.Web.UI.Page[/color][/color][/font]
[color=#000000][font=Verdana][color=#0000ff][color=#000000] 错误3:[font=Verdana]Error 1 The type 'ZSWeb.Article' already contains a definition for 'ctlTitle' D:\root\http://www.5xsoft.com/\Article.aspx.cs 20 25 http://localhost/www.5xsoft.com/
[color=#000000]说明:VS2003中,使用Web控件要在.cs中申明后才能使用,但在 VS2005中默认不能申明。
解决:删除.cs文件中的 Web 控件声明。如删除 [font=Verdana]protected Label ctlTitle;
小结:其实这里,我绕了一个圈,在转换项目前,直接把 Web 控件声明删除掉,就不会有错误3出现了。[/color][/font]
[/color][/font][/color][/color][/font]
浙公网安备 33010602011771号