一、問題引入在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,可以看出CodeGif. 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類別。
結論:ASP.Net的頁面可以繼承自從 [繼承自System.Web.UI.Page類別的父類別] 擴充的子類別
三、解決方案在VS2005中也是可以自訂組件名稱的-那就是在創建專案的時候,而不是網站的時候。也就是說可以在你創建的網站已經寫好了,你可以重新創建一個項目,然後把網站的程式碼拿來重新編譯。便宜完後可能需要更改aspx檔案的繼承,可能也不必更改,看你怎麼便宜了,因為aspx檔案的繼承只和類別名稱(有命名空間時,也要指定命名空間)有關。 MyCodeGif.aspx頁面檔案完全可以改成
<%@ Page Language="C#" AutoEventWireup="true" Inherits="PageBase" %>
把裡面的CodeFile="MyCodeGif.aspx.cs"去掉。
這樣就能模仿VS2003的方式發佈網站了。過程可能複雜點,但是對於後期維護我感覺還是挺有用的,畢竟習慣了VS2003.而且可以和2003一樣做免虛擬的程序了。
全文完。希望對大家有用。
作者:謝平,夕陽軌跡 2006-5-27