一、问题引入
在vs2005网站开发过程中,网站发布问题一直是个问题.vs2005创建的网站有几个默认的目录:app_code,app_data,app_themes........
如果是但cs/vb文件,比如uploadfile.cs类uploadfile,这个类文件没有可视的aspx文件,那么这个文件就必须放到app_code目录下,否则在vs2005网站中,该类是不可访问的.那么放就放进去吧,但是编译的时候(我的vs2005是team版的,生成没有反应,感觉象是检查了一遍代码,只能使用发布网站来预编译.不知道其他版本怎么样.)问题来了.选择发布网站后,它会让你选择以什么方式发布,一般选默认就可以了.那样生成的dll数量还少点.发布后,在bin目录一般会有app_code.compiled,app_code.dll,app_web_(随机字符).dll,引用的dll等文件.问题就出在这了,如果要做个免虚拟的程序,岂不是可能bin目录会需要放两个app_code.dll?会不起冲突么?还有,如果程序更改一次需要重新发布,那就完了.看看vs2005干的好事吧.inherits="mycodegif, app_web_vf3ukhnv"本来好好的,一个mycodegif.aspx文件,一个mycodegif.aspx.cs文件,现在mycodegif.aspx文件继承自mycodegif, app_web_vf3ukhnv,可以看出mycodegif是mycodegif.aspx.cs定义的类,app_web_vf3ukhnv是bin文件夹中的一个dll文件名.你再尝试发布一次的话,更头疼的问题来了,怎么mycodegif.aspx页面又继承自mycodegif, app_web_qwdwqd了?编译后的程序集名字都不一样了!
二、asp.net中页面与类的关系
asp.net 中,页面是可以继承自类的,可以多重继承。比如mycodegif.aspx页面文件
<%@ page language="c#" autoeventwireup="true" codefile="mycodegif.aspx.cs" inherits="mycodegif" %>mycodegif.aspx.cs中是这样的
using system;
using system.data;
using system.configuration;
using system.collections;
using system.web;
using system.web.security;
using system.web.ui;
using system.web.ui.webcontrols;
using system.web.ui.webcontrols.webparts;
using system.web.ui.htmlcontrols;
using freecodenum;
public partial class mycodegif : system.web.ui.page
{
protected void page_load(object sender, eventargs e)
{
//.....逻辑
}
}
可见mycodegif.aspx页面继承自类mycodegif 也可以这样继承,mycodegif.aspx页面文件
<%@ page language="c#" autoeventwireup="true" codefile="mycodegif.aspx.cs" inherits="mycodegif" %>
mycodegif.aspx.cs中是这样的
using system;
using system.data;
using system.configuration;
using system.collections;
using system.web;
using system.web.security;
using system.web.ui;
using system.web.ui.webcontrols;
using system.web.ui.webcontrols.webparts;
using system.web.ui.htmlcontrols;
using freecodenum;
public partial class mycodegif : pagebase
{
protected void page_load(object sender, eventargs e)
{
//.....逻辑
}
}
pagebase.cs这样
using system;
using system.web;
using system.collections;
/**//// <summary>
/// pagebase 的摘要说明
/// </summary>
public class pagebase : system.web.ui.page
{
public pagebase()
{
}
}
如过象我mycodegif.aspx页面文件,我甚至可以
<%@ page language="c#" autoeventwireup="true" codefile="mycodegif.aspx.cs" inherits="pagebase" %>也就是页面直接继承自pagebase类。
三、解决方案
在vs2005中也是可以自定义程序集名称的——那就是在创建项目的时候,而不是网站的时候。也就是说可以在你创建的网站已经写好了,你可以重新创建个项目,然后把网站的代码拿来重新编译。便宜完后可能需要更改aspx文件的继承,可能也不必更改,看你怎么便宜了,因为aspx文件的继承只和类名(有命名空间时,也要指定命名空间)有关。mycodegif.aspx页面文件完全可以改成
<%@ page language="c#" autoeventwireup="true" inherits="pagebase" %>
把里面的codefile="mycodegif.aspx.cs"去掉。
这样就能模仿vs2003的方式发布网站了。过程可能复杂点,但是对于后期维护我感觉还是挺有用的,毕竟习惯了vs2003.而且可以和2003一样做免虚拟的程序了。
全文完。希望能对大家有用。作者:谢平,夕阳轨迹
新闻热点
疑难解答