技术开发 频道

编译asp.net 2.0项目到dll文件以提高WEB服务的整体性能


  现在当浏览器访问http://localhost/dlltest/dlltest1.aspx时,实际上就是调用了ex1.dll中DllTest.Ex1Page类的ProcessRequest方法,在浏览中应该可以看到一个简单的页面。

  (三)把单个aspx文件编译成DLL

  从上一节微软公开描述的"言外之意"来看,微软是不支持让开发人员直接把aspx文件编译成DLL的。然而,Asp.Net高级界面技术(服务端HTML控件,WEB控件等等)都是需要通过aspx文件才能展现出来的,如果为了DLL的运行效率而放弃aspx的高级特性,则显然是得不尝失的。

  现在静下心来分析一下:

  csc编译器只是一个c#语言的编译器,它只能对符合C#语言规范的文件进行编译,而aspx文件的格式显然不符合c#语言规范,所以csc编译器是无法对aspx源文件进行编译的。

  因此,要想把aspx文件编译成dll文件,必然要先把aspx文件转化成csc编译器能识别的cs源文件。那么用什么工具来进行转换呢?虽然我深信这个工具一定是隐藏在。Net Framework里面,但在查阅了大量的Asp.Net及。Net的公开文档及参考手册,资料之后,仍找不到相关资料。

  呵呵,天无绝人之路,一个偶然的机会,还是让我发现了这个秘密。

  来看看源文件ex2.aspx:
/* 源文件:ex2.aspx 开始 */ <% @ Page Language="c#" %> <script runat="server"> /*你没看错,下一行就是"abcdefg",正是这一行,才让我有机会写出本篇文章^_^;在文中,我把这一行称作"代码陷阱"*/ abcdefg // 代码陷阱 void Page_Load(Object src, EventArgs args) { if( !IsPostBack ) NoteLabel.Text = "请输入您的姓名:"; } 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 结束 */
  如果把"代码陷阱"注释掉或删掉,那么ex2.aspx就是一个简单的Asp.Net文件,用IE浏览此页面可以发现它能正常工作。
  现在让我们打开"陷阱",来看看Asp.Net到底返回了什么?

  返回的是一个"编译错误"的页面,报告源文件无法通过编译。让我们感兴趣的是该页面最下方的一个名为"显示完整的编译源"的超链接,点击些链接,就能看到这个由ex2.aspx转换而来的cs源文件("完整的编译源")的完整内容。把这部分"完整的编译源"去掉前面的行号信息和其它的一些编译开关(主要是 #line编译命令),并关闭那个可爱的"代码陷阱"(用//把它注释掉或直接把它delete也行),整理后保存为ex2_aspx.cs:
0
相关文章