免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
把a(bǔ)spx文件編譯成DLL文件
說(shuō)明:
    這是一篇介紹如何將ASPX文件編譯成DLL文件的文章,對(duì)于網(wǎng)頁(yè)源程序的保護(hù)應(yīng)該有一定的幫助吧。里面的例子我都調(diào)試通過(guò)。不過(guò)在ASP.NET2.0的環(huán)境中好象有點(diǎn)問(wèn)題——第三步的例子中,在ASPX文件中加了“代碼陷阱”之后,“編譯錯(cuò)誤”的頁(yè)面中并沒(méi)有“顯示完整的編譯源”這一鏈接,而在ASP.NET1.1中就沒(méi)有這個(gè)問(wèn)題。難道是MS意識(shí)到了這個(gè)問(wèn)題特意將它屏蔽掉的??這也太!%%%^&&&***了吧???下面是原文全文摘錄,本文僅作技術(shù)學(xué)習(xí)使用,版權(quán)歸原作者所有。

把a(bǔ)spx文件編譯成DLL文件


浙江省紹興市解放北路148號(hào)交通大廈六樓 周杰忻

前言

Asp.net不是asp的簡(jiǎn)單升級(jí),而是微軟.Net計(jì)劃中的一個(gè)重要組成部分,它依托.Net的多語(yǔ)言與強(qiáng)大的類庫(kù)支持,引進(jìn)了服務(wù)端HTML控件與WEB控件,自動(dòng)處理控件的客戶端與服務(wù)端的 交互,為開(kāi)發(fā)人員提供了類似Windows下窗口編程的界面,為開(kāi)發(fā)大型網(wǎng)絡(luò)應(yīng)用程序功能提供了良好的編程接口,也能夠極大地提高開(kāi)發(fā)人員的工作效率。

然而,“一次轉(zhuǎn)換,兩次編譯”過(guò)程使得aspx文件在首次執(zhí)行(或更新后首次運(yùn)行)時(shí)顯得略有不足,特別是在擁有大量aspx及codebehind的代碼文件的應(yīng)用環(huán)境中,把a(bǔ)spx文件編譯成DLL(在.Net中,被稱為應(yīng)用程序集)后再發(fā)布,省去“一次轉(zhuǎn)換、一次編譯”的時(shí)間及CPU占用率,對(duì)提高WEB服務(wù)的整體性能會(huì)有較大的提升。當(dāng)然,編譯成DLL后,對(duì)源代碼的保密性也有一定程度的提高。

本文通過(guò)對(duì)Asp.Net的基本處理流程及一個(gè)偶然發(fā)現(xiàn)的秘密的分析,介紹了在Asp.Net中如何建立aspx到DLL的映射,如何開(kāi)發(fā)一個(gè)可以處理HTTP請(qǐng)求/響應(yīng)的DLL,以及如何設(shè)置“陷阱”,把現(xiàn)成的單個(gè)aspx文件與codebehind的aspx文件編譯成DLL的過(guò)程,文章最后,還介紹了一個(gè)在實(shí)際操作過(guò)程的小技巧。

由于本文要涉及Asp.Net應(yīng)用程序、命令行編譯、web.config配置文件等概念,為了使讀者能更好地理解本文內(nèi)容,也為了使本文看上去不顯累贅,先就本文相對(duì)應(yīng)的系統(tǒng)環(huán)境作一介紹:

系統(tǒng)環(huán)境:

Win2000(SP3)+ IIS5 + .Net Framework 1.0(中文版)。

服務(wù)器名稱:

由于本文的例子均在本機(jī)上測(cè)試,服務(wù)器名稱為localhost。

IIS設(shè)置:

建立虛擬目錄dlltest(真實(shí)路徑為w:\wwwroot\dlltest),并把它設(shè)為應(yīng)用程序,在dlltest下建立bin目錄。所有源文件將放在dlltest目錄下,而所有dll文件將放在dlltest\bin目錄下。

Asp.Net應(yīng)用程序配置文件--web.config

在dlltest目錄下建立一個(gè)web.config文件,初始時(shí)該文件內(nèi)容如下:

<?xml version="1.0"?>

<configuration>

<system.web />

</configuration>

命令窗口(DOS窗口)

打開(kāi)命令窗口,并用cd命令使當(dāng)前目錄為w:\wwwroot\dlltest。

一、建立aspx到dll的映射

首先讓我們來(lái)看看一般情況下aspx文件是如何被Asp.Net處理的:

當(dāng)一個(gè)HTTP請(qǐng)求(例如“http://webserver/webapp/webpage.aspx”)從客戶端發(fā)送到IIS服務(wù)器時(shí),IIS捕獲并分析這個(gè)請(qǐng)求,當(dāng)它分析到這個(gè)請(qǐng)求是一個(gè)aspx頁(yè)面時(shí),立即以“/webapp/webpage.aspx”為參數(shù)調(diào)用Asp.Net運(yùn)行環(huán)境(aspnet_wp.exe),Asp.Net環(huán)境啟動(dòng)后,檢查“/webapp/webpage.aspx”是否存在,若不存在,則向客戶端返回HTTP 404(File not found)錯(cuò)誤,否則在Asp.Net 的臨時(shí)目錄中查找相應(yīng)的dll文件,若不存在或者該dll比aspx源文件“舊”,則調(diào)用csc編譯器(若aspx的服務(wù)端腳本語(yǔ)言是VB或JScript,則調(diào)用相應(yīng)的vbc編譯器, jsc編譯器)把a(bǔ)spx文件編譯成dll,然后Asp.Net再調(diào)用該dll來(lái)處理具體的客戶請(qǐng)求,返回服務(wù)器響應(yīng)。

從這個(gè)處理流程可以看出,一般情況下,Asp.Net運(yùn)行環(huán)境會(huì)自動(dòng)識(shí)別、檢查、更新與aspx相對(duì)應(yīng)的dll。那么有沒(méi)有其它辦法可以強(qiáng)制把對(duì)一個(gè)aspx文件的處理“路由”到一個(gè)已編譯存在的DLL呢?方法就是在Asp.Net應(yīng)用程序配置文件web.config的system.web節(jié)的httpHandlers節(jié)添加aspx到dll的映射項(xiàng),語(yǔ)法如下:

<add verb="*" path="aspx文件名" type="類名,dll文件" />

aspx文件:需要被“路由”的虛擬名稱,擴(kuò)展名必須是aspx,否則IIS會(huì)先于Asp.Net運(yùn)行環(huán)境處理該文件。

dll文件: dll文件(應(yīng)用程序集)的名稱,不必輸入“.dll”。ASP.NET 首先在應(yīng)用程序的專用 \bin 目錄中搜索程序集 DLL,然后在系統(tǒng)程序集緩存中搜索程序集 DLL。

類名: 由于一個(gè)dll可能會(huì)有多個(gè)名稱空間或多個(gè)類,因此必須指明當(dāng)dll調(diào)用時(shí)自動(dòng)加載哪個(gè)類。

例如,某一Asp.Net應(yīng)用程序的web.config文件如下:

<?xml version="1.0"?>

<configuration>

<system.web>

<httpHandlers>

<add verb="*" path="index.aspx" type="BBS.IndexPage, bbs" />

</httpHandlers>

</system.web>

</configuration>

該配置文件告訴Asp.Net,在客戶端請(qǐng)求本應(yīng)用程序的index.aspx文件時(shí),直接調(diào)用應(yīng)用程序bin目錄下的bbs.dll,并自動(dòng)加載其中的BBS.IndexPage類。

二、開(kāi)發(fā)能處理HTML頁(yè)面的DLL

應(yīng)該指出的是,并不是所有的應(yīng)用程序集DLL都能實(shí)現(xiàn)HTTP請(qǐng)求/響應(yīng)模式。還是來(lái)看一下Microsoft Asp.Net快速入門教程(http://chs.gotdotnet.com/quickstart/aspplus/)中關(guān)于“Http 處理程序和工廠”的描述:

ASP.NET 提供低級(jí)別的請(qǐng)求/響應(yīng) API,使開(kāi)發(fā)人員能夠使用 .NET 框架類為傳入的 HTTP 請(qǐng)求提供服務(wù)。為此,開(kāi)發(fā)人員需創(chuàng)作支持 System.Web.IHTTPHandler 接口和實(shí)現(xiàn) ProcessRequest() 方法的類。當(dāng)處理 HTTP 請(qǐng)求不需要由高級(jí)別的頁(yè)框架抽象化提供的服務(wù)時(shí),處理程序通常很有用。處理程序的常用用途包括篩選器和類似 CGI 的應(yīng)用程序,尤其是那些返回二進(jìn)制數(shù)據(jù)的應(yīng)用程序。

ASP.NET 收到的每個(gè)傳入 HTTP 請(qǐng)求最終由實(shí)現(xiàn) IHTTPHandler 的類的特定實(shí)例來(lái)處理。IHttpHandlerFactory 提供了處理 IHttpHandler 實(shí)例 URL 請(qǐng)求的實(shí)際解析的結(jié)構(gòu)。除了 ASP.NET 提供的默認(rèn) IHttpHandlerFactory 類外,開(kāi)發(fā)人員還可以選擇創(chuàng)建和注冊(cè)工廠以支持大量的請(qǐng)求解析和激活方案。

從這段文字可以看出,當(dāng)aspx頁(yè)面不涉及.net框架提供的高級(jí)界面技術(shù)(如數(shù)據(jù)緩存、狀態(tài)保持、Web窗體控件引用等等)時(shí),且向客戶端輸出的不是復(fù)雜的HTML文本,特別是只向客戶端返回二進(jìn)制數(shù)據(jù)(如圖片,聲音等)時(shí),可以用一個(gè).cs應(yīng)用程序文件(本文使用c#語(yǔ)言,如果是用VB或JScript,...)來(lái)替代,而該應(yīng)用程序必須有一個(gè)實(shí)現(xiàn)System.Web.IHTTPHandler 接口和并實(shí)現(xiàn) ProcessRequest() 方法的類。一個(gè)簡(jiǎn)單的例子如下:

/* 源文件:ex1.cs 開(kāi)始 */

using System.Web;

namespace DllTest

{

/*

類必須實(shí)現(xiàn)IHttpHandler接口。如果程序?qū)⒃L問(wèn)會(huì)話狀態(tài)(Session),則必須實(shí)現(xiàn) IRequiresSessionState 接口(不包含任何方法的標(biāo)記接口)。

*/

public class Ex1Page : IHttpHandler

{

/*

IsReusable屬性告訴.Net框架,本程序是否可以被多個(gè)線程同時(shí)使用。

true對(duì)應(yīng)是;false對(duì)應(yīng)否。

*/

public bool IsReusable

{

get { return true; }

}

/*

實(shí)現(xiàn)ProcessRequest方法,向客戶端返回響應(yīng)數(shù)據(jù)。

本例中向客戶端返回一個(gè)簡(jiǎn)單的HTML頁(yè)面

*/

public void ProcessRequest(HttpContext context)

{

HttpResponse res = context.Response;

res.Write("<html><body>");

res.Write("<h1>DllTest - Ex1(例1)</h1><hr>");

res.Write("本頁(yè)面直接由DLL處理");

res.Write("</html></body>");

}

}

}

/* 源文件:ex1.cs 結(jié)束 */

在命令行狀態(tài),用如下的編譯命令把ex1.cs編譯成ex1.dll,并把它存放在bin目錄下。

csc /t:library /out:bin\ex1.dll ex1.cs

在配置文件web.config中添加aspx->dll映射,添加后,web.config應(yīng)該是這樣子的:

<?xml version="1.0"?>

<configuration>

<system.web>

<httpHandlers>

<add verb="*" path="dlltest1.aspx" type="DllTest.Ex1Page, ex1" />

</httpHandlers>

</system.web>

</configuration>

現(xiàn)在當(dāng)瀏覽器訪問(wèn)http://localhost/dlltest/dlltest1.aspx時(shí),實(shí)際上就是調(diào)用了ex1.dll中DllTest.Ex1Page類的ProcessRequest方法,在瀏覽中應(yīng)該可以看到一個(gè)簡(jiǎn)單的頁(yè)面。

三、把單個(gè)aspx文件編譯成DLL

從上一節(jié)微軟公開(kāi)描述的“言外之意”來(lái)看,微軟是不支持讓開(kāi)發(fā)人員直接把a(bǔ)spx文件編譯成DLL的。然而,Asp.Net高級(jí)界面技術(shù)(服務(wù)端HTML控件,WEB控件等等)都是需要通過(guò)aspx文件才能展現(xiàn)出來(lái)的,如果為了DLL的運(yùn)行效率而放棄aspx的高級(jí)特性,則顯然是得不嘗失的。

現(xiàn)在靜下心來(lái)分析一下:

csc編譯器只是一個(gè)c#語(yǔ)言的編譯器,它只能對(duì)符合C#語(yǔ)言規(guī)范的文件進(jìn)行編譯,而aspx文件的格式顯然不符合c#語(yǔ)言規(guī)范,所以csc編譯器是無(wú)法對(duì)aspx源文件進(jìn)行編譯的。

因此,要想把a(bǔ)spx文件編譯成dll文件,必然要先把a(bǔ)spx文件轉(zhuǎn)化成csc編譯器能識(shí)別的cs源文件。那么用什么工具來(lái)進(jìn)行轉(zhuǎn)換呢?雖然我深信這個(gè)工具一定是隱藏在.Net Framework里面,但在查閱了大量的Asp.Net及.Net的公開(kāi)文檔及參考手冊(cè),資料之后,仍找不到相關(guān)資料。

呵呵,天無(wú)絕人之路,一個(gè)偶然的機(jī)會(huì),還是讓我發(fā)現(xiàn)了這個(gè)秘密。

來(lái)看看源文件ex2.aspx:

/* 源文件:ex2.aspx 開(kāi)始 */

<%@ Page Language="c#" %>

<script runat="server">

/*

你沒(méi)看錯(cuò),下一行就是“abcdefg”,正是這一行,才讓我有機(jī)會(huì)寫出本篇文章^_^;

在文中,我把這一行稱作“代碼陷阱”

*/

abcdefg // 代碼陷阱

void Page_Load(Object src, EventArgs args)

{

if( !IsPostBack ) NoteLabel.Text = "請(qǐng)輸入您的姓名:";

}

void OnNameSubmit(Object src, EventArgs args)

{

string name = f_Name.Value;

NoteLabel.Text = (name=="") ? "姓名不能為空" : name +",您好。歡迎光臨!";

}

</script>

<html>

<body>

<form runat="server">

<h1>DllTest - Ex2(例2)</h1>

<hr>

<asp:label runat="server" id="NoteLabel" style="color:red; font-weight:bold" />

<input runat="server" id="f_Name" size="8">

<button runat="server" onserverclick="OnNameSubmit">確定</button>

</form>

</body>

</html>

/* 源文件:ex2.aspx 結(jié)束 */

如果把“代碼陷阱”注釋掉或刪掉,那么ex2.aspx就是一個(gè)簡(jiǎn)單的Asp.Net文件,用IE瀏覽此頁(yè)面可以發(fā)現(xiàn)它能正常工作。

現(xiàn)在讓我們打開(kāi)“陷阱”,來(lái)看看Asp.Net到底返回了什么?

返回的是一個(gè)“編譯錯(cuò)誤”的頁(yè)面,報(bào)告源文件無(wú)法通過(guò)編譯。讓我們感興趣的是該頁(yè)面最下方的一個(gè)名為“顯示完整的編譯源”的超鏈接,點(diǎn)擊些鏈接,就能看到這個(gè)由ex2.aspx轉(zhuǎn)換而來(lái)的cs源文件(“完整的編譯源”)的完整內(nèi)容。把這部分“完整的編譯源”去掉前面的行號(hào)信息和其它的一些編譯開(kāi)關(guān)(主要是#line編譯命令),并關(guān)閉那個(gè)可愛(ài)的“代碼陷阱”(用//把它注釋掉或直接把它delete也行),整理后保存為ex2_aspx.cs:

/* 源文件:ex2_aspx.cs 開(kāi)始 */

/*

從下面的說(shuō)明可以看出,確實(shí)有一個(gè)未公開(kāi)的工具來(lái)完成把a(bǔ)spx文件轉(zhuǎn)化成cs源文件

*/

//------------------------------------------------------------------------------

// <autogenerated>

// This code was generated by a tool.

// Runtime Version:1.0.3705.0

//

// Changes to this file may cause incorrect behavior and will be lost if

// the code is regenerated.

// </autogenerated>

//------------------------------------------------------------------------------

/*

奇怪的是:命名空間居然是ASP而不是ASPX

建議把該名稱改成適合應(yīng)用程序的名稱,防止命名沖突,例如針對(duì)本文,可以改成DllTest

這里沒(méi)改是為了讓大家看清它的原貌

*/

namespace ASP {

using System;

using System.Collections;

using System.Collections.Specialized;

using System.Configuration;

using System.Text;

using System.Text.RegularExpressions;

using System.Web;

using System.Web.Caching;

using System.Web.SessionState;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.HtmlControls;

/*

1、注意一下類名的構(gòu)成,如果必要,可以把它改成有意義的名稱,例如針對(duì)本文,可以改成Ex2Page

2、注意它的基類。Syste.Web.UI.Page實(shí)現(xiàn)了IHttpHandler接口,由于要訪問(wèn)Session,所以也實(shí)現(xiàn)了IRequiresSessionState接口。

*/

public class ex2_aspx : System.Web.UI.Page, System.Web.SessionState.IRequiresSessionState {

private static int __autoHandlers;

protected System.Web.UI.WebControls.Label NoteLabel;

protected System.Web.UI.HtmlControls.HtmlInputText f_Name;

protected System.Web.UI.HtmlControls.HtmlButton __control3;

protected System.Web.UI.HtmlControls.HtmlForm __control2;

private static bool __intialized = false;

private static System.Collections.ArrayList __fileDependencies;

/* 現(xiàn)在可以關(guān)掉“陷阱”了 */

// abcdefg

void Page_Load(Object src, EventArgs args)

{

if( !IsPostBack ) NoteLabel.Text = "請(qǐng)輸入您的姓名: ";

}

void OnNameSubmit(Object src, EventArgs args)

{

string name = f_Name.Value;

NoteLabel.Text = (name=="") ? "姓名不能為空" : name +",您好。歡迎光臨!";

}

/* 構(gòu)造函數(shù) */

public ex2_aspx() {

System.Collections.ArrayList dependencies;

if ((ASP.ex2_aspx.__intialized == false)) {

dependencies = new System.Collections.ArrayList();

/*

應(yīng)該把下面這行注釋掉,讓DLL成為一個(gè)無(wú)依賴的獨(dú)立文件

防止在DLL運(yùn)行時(shí)再次去查找、比較它的“依賴”文件的新舊

*/

//dependencies.Add("W:\\wwwroot\\dlltest\\ex2.aspx");

ASP.ex2_aspx.__fileDependencies = dependencies;

ASP.ex2_aspx.__intialized = true;

}

}

protected override int AutoHandlers {

get {

return ASP.ex2_aspx.__autoHandlers;

}

set {

ASP.ex2_aspx.__autoHandlers = value;

}

}

protected System.Web.HttpApplication ApplicationInstance {

get {

return ((System.Web.HttpApplication)(this.Context.ApplicationInstance));

}

}

public override string TemplateSourceDirectory {

get {

return "/dlltest";

}

}

private System.Web.UI.Control __BuildControlNoteLabel() {

System.Web.UI.WebControls.Label __ctrl;

__ctrl = new System.Web.UI.WebControls.Label();

this.NoteLabel = __ctrl;

__ctrl.ID = "NoteLabel";

((System.Web.UI.IAttributeAccessor)(__ctrl)).SetAttribute("style", "color:red; font-weight:bold");

return __ctrl;

}

private System.Web.UI.Control __BuildControlf_Name() {

System.Web.UI.HtmlControls.HtmlInputText __ctrl;

__ctrl = new System.Web.UI.HtmlControls.HtmlInputText();

this.f_Name = __ctrl;

__ctrl.ID = "f_Name";

__ctrl.Size = 8;

return __ctrl;

}

private System.Web.UI.Control __BuildControl__control3() {

System.Web.UI.HtmlControls.HtmlButton __ctrl;

__ctrl = new System.Web.UI.HtmlControls.HtmlButton();

this.__control3= __ctrl;

System.Web.UI.IParserAccessor __parser = ((System.Web.UI.IParserAccessor)(__ctrl));

__parser.AddParsedSubObject(new System.Web.UI.LiteralControl("確定"));

__ctrl.ServerClick += new System.EventHandler(this.OnNameSubmit);

return __ctrl;

}

private System.Web.UI.Control __BuildControl__control2() {

System.Web.UI.HtmlControls.HtmlForm __ctrl;

__ctrl = new System.Web.UI.HtmlControls.HtmlForm();

this.__control2= __ctrl;

System.Web.UI.IParserAccessor __parser = ((System.Web.UI.IParserAccessor)(__ctrl));

__parser.AddParsedSubObject(new System.Web.UI.LiteralControl("\r\n <h1>DllTest - Ex2(例2)</h1>\r\n <hr>\r\n "));

this.__BuildControlNoteLabel();

__parser.AddParsedSubObject(this.NoteLabel);

__parser.AddParsedSubObject(new System.Web.UI.LiteralControl("\r\n "));

this.__BuildControlf_Name();

__parser.AddParsedSubObject(this.f_Name);

__parser.AddParsedSubObject(new System.Web.UI.LiteralControl("\r\n "));

this.__BuildControl__control3();

__parser.AddParsedSubObject(this.__control3);

__parser.AddParsedSubObject(new System.Web.UI.LiteralControl("\r\n "));

return __ctrl;

}

private void __BuildControlTree(System.Web.UI.Control __ctrl) {

System.Web.UI.IParserAccessor __parser = ((System.Web.UI.IParserAccessor)(__ctrl));

__parser.AddParsedSubObject(new System.Web.UI.LiteralControl("\r\n\r\n<html>\r\n<body>\r\n "));

this.__BuildControl__control2();

__parser.AddParsedSubObject(this.__control2);

__parser.AddParsedSubObject(new System.Web.UI.LiteralControl("\r\n</body>\r\n</html>\r\n"));

}

protected override void FrameworkInitialize() {

this.__BuildControlTree(this);

this.FileDependencies = ASP.ex2_aspx.__fileDependencies;

this.EnableViewStateMac = true;

}

public override int GetTypeHashCode() {

return -11574299;

}

}

}

/* 源文件:ex2_aspx.cs 結(jié)束 */

相信大家在分析了這個(gè)文件之后,會(huì)對(duì)Asp.Net運(yùn)行原理有更進(jìn)一步的認(rèn)識(shí)(與本文無(wú)關(guān),不詳述)。

在命令行狀態(tài),用如下的編譯命令把ex2_aspx.cs編譯成ex2.dll,并把它存放在bin目錄下。

csc /t:library /out:bin\ex2.dll ex2_aspx.cs

在配置文件web.config中添加aspx->dll映射,即在system.web節(jié)的httpHandlers添加下面一行:

<add verb="*" path="dlltest2.aspx" type="ASP.ex2_aspx, ex2" />

現(xiàn)在當(dāng)瀏覽器訪問(wèn)http://localhost/dlltest/dlltest2.aspx時(shí),就如同訪問(wèn)ex2.aspx一樣。當(dāng)然,現(xiàn)在即使ex2.aspx不存在,或者已經(jīng)更新過(guò),也不會(huì)對(duì)頁(yè)面訪問(wèn)有任何影響,除非重新生成bin\ex2.dll。

四、把codebehind的aspx文件編譯成dll

對(duì)于把codebehind的aspx文件編譯成dll,其中把a(bǔ)spx文件轉(zhuǎn)化成cs源文件的原理同上,也是先設(shè)置一個(gè)“代碼陷阱”,然后把“完整的編譯源”進(jìn)行適當(dāng)整理,保存為cs源文件。區(qū)別是在編譯成dll時(shí)的步驟:(為敘述方便,假設(shè)界面文件為ex3.aspx,codebehind文件為ex3.aspx.cs,ex3.aspx的“完整編譯源”保存為ex3_aspx.cs)

第一步:先用如下命令把ex3.aspx.cs編譯成bin\ex3.aspx.cs.dll

csc /t:library /out:bin\ex3.aspx.cs.dll ex3.aspx.cs

第二步:再用如下命令把ex3_aspx.cs編譯成bin\ex3.dll

csc /t:library /r:bin\ex3.aspx.cs.dll /out:bin\ex3.dll ex3_aspx.cs

然后在配置文件web.config中添加aspx->dll映射,即在system.web節(jié)的httpHandlers添加下面一行:

<add verb="*" path="dlltest3.aspx" type="ASP.ex3_aspx, ex3" />

現(xiàn)在打開(kāi)瀏覽器,訪問(wèn)http://localhost/dlltest/dlltest3.aspx試試。

五、一點(diǎn)小技巧

在設(shè)置“陷阱”把a(bǔ)spx文件轉(zhuǎn)化成cs源文件時(shí),一般是使用copy、paste方法把“完整的編譯源”保存在記事本或vs.net或其它asp.net開(kāi)發(fā)環(huán)境,再進(jìn)行整理后保存為cs源文件的。

整理,就是把paste進(jìn)來(lái)的行號(hào)信息與“#line”編譯指令去掉。如果是手動(dòng)地刪掉這些信息,則會(huì)太麻煩,即使是一個(gè)簡(jiǎn)單的如ex2.aspx的文件,也會(huì)產(chǎn)生約270行的“完整的編譯源”。

我所使用的一個(gè)小技巧是:在記事本里,用替換的方法來(lái)快速整理。用"/* 行"來(lái)全部替換"行",用":*/"來(lái)全部替換":",用"http:// #line 行"來(lái)全部替換"#line",替換完成之后,再把“代碼陷阱”注釋掉,把主類構(gòu)造函數(shù)里設(shè)置“依賴文件”的語(yǔ)句全部注釋掉,這樣就算整理完成了。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
從asp到asp.net之快速轉(zhuǎn)型[轉(zhuǎn)] (ASP(.net) X-在線 技術(shù)論壇)
ASP.NET FileUpload應(yīng)用實(shí)例
ASP.NET_編碼模型
aspx與aspx.cs的關(guān)系(1)
asp.net緩存機(jī)制 - .net新手 - 博客園
C#-無(wú)法加載類型’HomePage.aspx.cs’
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服