【转载】把aspx文件编译成DLL文件-.NET教程,Asp.Net开发

Asp.net调用DLL文件 Asp.net调用DLL文件(如:DecryptActiveX.dll)1、把dll文件放到bin文件夹下,先引用你的dll文件(右击bin文件夹—添加引用)2、using你dll的命名空间 (如:using DecryptActiveX;)3、在代码中声明dll中的类(如:DecryptClass b = new DecryptClass();) 4、接着开始编程(如:string type 阅读详情

前言

asp.net不是asp的简单升级,而是微软.net计划中的一个重要组成部分,它依托.net的多语言与强大的类库支持,引进了服务端html控件与web控件,自动处理控件的客户端与服务端的 交互,为开发人员提供了类似windows下窗口编程的界面,为开发大型网络应用程序功能提供了良好的编程接口,也能够极大地提高开发人员的工作效率。

然而,“一次转换,两次编译”过程使得aspx文件在首次执行(或更新后首次运行)时显得略有不足,特别是在拥有大量aspx及codebehind的代码文件的应用环境中,把aspx文件编译成dll(在.net中,被称为应用程序集)后再发布,省去“一次转换、一次编译”的时间及cpu占用率,对提高web服务的整体性能会有较大的提升。当然,编译成dll后,对源代码的保密性也有一定程度的提高。

本文通过对asp.net的基本处理流程及一个偶然发现的秘密的分析,介绍了在asp.net中如何建立aspx到dll的映射,如何开发一个可以处理http请求/响应的dll,以及如何设置“陷阱”,把现成的单个aspx文件与codebehind的aspx文件编译成dll的过程,文章最后,还介绍了一个在实际操作过程的小技巧。

由于本文要涉及asp.net应用程序、命令行编译、web.config配置文件等概念,为了使读者能更好地理解本文内容,也为了使本文看上去不显累赘,先就本文相对应的系统环境作一介绍:

系统环境:

win2000(sp3)+ iis5 + .net framework 1.0(中文版)。

服务器名称:

由于本文的例子均在本机上测试,服务器名称为localhost。

iis设置:

建立虚拟目录dlltest(真实路径为w:/wwwroot/dlltest),并把它设为应用程序,在dlltest下建立bin目录。所有源文件将放在dlltest目录下,而所有dll文件将放在dlltest/bin目录下。

asp.net应用程序配置文件--web.config

在dlltest目录下建立一个web.config文件,初始时该文件内容如下:

<?xml version="1.0"?>
<configuration>
<system.web />
</configuration>

命令窗口(dos窗口)

打开命令窗口,并用cd命令使当前目录为w:/wwwroot/dlltest。

一、建立aspx到dll的映射

首先让我们来看看一般情况下aspx文件是如何被asp.net处理的:

当一个http请求(例如“http://webserver/webapp/webpage.aspx”)从客户端发送到iis服务器时,iis捕获并分析这个请求,当它分析到这个请求是一个aspx页面时,立即以“/webapp/webpage.aspx”为参数调用asp.net运行环境(aspnet_wp.exe),asp.net环境启动后,检查“/webapp/webpage.aspx”是否存在,若不存在,则向客户端返回http 404(file not found)错误,否则在asp.net 的临时目录中查找相应的dll文件,若不存在或者该dll比aspx源文件“旧”,则调用csc编译器(若aspx的服务端脚本语言是vb或jscript,则调用相应的vbc编译器, jsc编译器)把aspx文件编译成dll,然后asp.net再调用该dll来处理具体的客户请求,返回服务器响应。

从这个处理流程可以看出,一般情况下,asp.net运行环境会自动识别、检查、更新与aspx相对应的dll。那么有没有其它办法可以强制把对一个aspx文件的处理“路由”到一个已编译存在的dll呢?方法就是在asp.net应用程序配置文件web.config的system.web节的httphandlers节添加aspx到dll的映射项,语法如下:

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

aspx文件:需要被“路由”的虚拟名称,扩展名必须是aspx,否则iis会先于asp.net运行环境处理该文件。

dll文件: dll文件(应用程序集)的名称,不必输入“.dll”。asp.net 首先在应用程序的专用 /bin 目录中搜索程序集 dll,然后在系统程序集缓存中搜索程序集 dll。

类名: 由于一个dll可能会有多个名称空间或多个类,因此必须指明当dll调用时自动加载哪个类。

例如,某一asp.net应用程序的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,在客户端请求本应用程序的index.aspx文件时,直接调用应用程序bin目录下的bbs.dll,并自动加载其中的bbs.indexpage类。

二、开发能处理html页面的dll

应该指出的是,并不是所有的应用程序集dll都能实现http请求/响应模式。还是来看一下microsoft asp.net快速入门教程(http://chs.gotdotnet.com/quickstart/aspplus/)中关于“http 处理程序和工厂”的描述:

asp.net 提供低级别的请求/响应 api,使开发人员能够使用 .net 框架类为传入的 http 请求提供服务。为此,开发人员需创作支持 system.web.ihttphandler 接口和实现 processrequest() 方法的类。当处理 http 请求不需要由高级别的页框架抽象化提供的服务时,处理程序通常很有用。处理程序的常用用途包括筛选器和类似 cgi 的应用程序,尤其是那些返回二进制数据的应用程序。

asp.net 收到的每个传入 http 请求最终由实现 ihttphandler 的类的特定实例来处理。ihttphandlerfactory 提供了处理 ihttphandler 实例 url 请求的实际解析的结构。除了 asp.net 提供的默认 ihttphandlerfactory 类外,开发人员还可以选择创建和注册工厂以支持大量的请求解析和激活方案。

从这段文字可以看出,当aspx页面不涉及.net框架提供的高级界面技术(如数据缓存、状态保持、web窗体控件引用等等)时,且向客户端输出的不是复杂的html文本,特别是只向客户端返回二进制数据(如图片,声音等)时,可以用一个.cs应用程序文件(本文使用c#语言,如果是用vb或jscript,...)来替代,而该应用程序必须有一个实现system.web.ihttphandler 接口和并实现 processrequest() 方法的类。一个简单的例子如下:

/* 源文件:ex1.cs 开始 */

using system.web;

namespace dlltest
{
/*
类必须实现ihttphandler接口。如果程序将访问会话状态(session),则必须实现 irequiressessionstate 接口(不包含任何方法的标记接口)。
*/

public class ex1page : ihttphandler
{

/*
isreusable属性告诉.net框架,本程序是否可以被多个线程同时使用。
true对应是;false对应否。
*/

public bool isreusable
{
get { return true; }
}

/*
实现processrequest方法,向客户端返回响应数据。
本例中向客户端返回一个简单的html页面
*/

public void processrequest(httpcontext context)
{
httpresponse res = context.response;
res.write("<html><body>");
res.write("<h1>dlltest - ex1(例1)</h1><hr>");
res.write("本页面直接由dll处理");
res.write("</html></body>");
}

}

}

/* 源文件:ex1.cs 结束 */

在命令行状态,用如下的编译命令把ex1.cs编译成ex1.dll,并把它存放在bin目录下。

csc /t:library /out:bin/ex1.dll ex1.cs
在配置文件web.config中添加aspx->dll映射,添加后,web.config应该是这样子的:

<?xml version="1.0"?>
<configuration>
<system.web>
<httphandlers>
<add verb="*" path="dlltest1.aspx" type="dlltest.ex1page, ex1" />
</httphandlers>
</system.web>
</configuration>

现在当浏览器访问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:

/* 源文件:ex2_aspx.cs 开始 */
/*

从下面的说明可以看出,确实有一个未公开的工具来完成把aspx文件转化成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
建议把该名称改成适合应用程序的名称,防止命名冲突,例如针对本文,可以改成dlltest
这里没改是为了让大家看清它的原貌

*/
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、注意一下类名的构成,如果必要,可以把它改成有意义的名称,例如针对本文,可以改成ex2page
2、注意它的基类。syste.web.ui.page实现了ihttphandler接口,由于要访问session,所以也实现了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;

/* 现在可以关掉“陷阱”了 */

// 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 +",您好。欢迎光临!";
}


/* 构造函数 */

public ex2_aspx() {
system.collections.arraylist dependencies;
if ((asp.ex2_aspx.__intialized == false)) {
dependencies = new system.collections.arraylist();

/*

应该把下面这行注释掉,让dll成为一个无依赖的独立文件
防止在dll运行时再次去查找、比较它的“依赖”文件的新旧
*/

//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 结束 */

相信大家在分析了这个文件之后,会对asp.net运行原理有更进一步的认识(与本文无关,不详述)。

在命令行状态,用如下的编译命令把ex2_aspx.cs编译成ex2.dll,并把它存放在bin目录下。

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

在配置文件web.config中添加aspx->dll映射,即在system.web节的httphandlers添加下面一行:

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

现在当浏览器访问http://localhost/dlltest/dlltest2.aspx时,就如同访问ex2.aspx一样。当然,现在即使ex2.aspx不存在,或者已经更新过,也不会对页面访问有任何影响,除非重新生成bin/ex2.dll。

四、把codebehind的aspx文件编译成dll


对于把codebehind的aspx文件编译成dll,其中把aspx文件转化成cs源文件的原理同上,也是先设置一个“代码陷阱”,然后把“完整的编译源”进行适当整理,保存为cs源文件。区别是在编译成dll时的步骤:(为叙述方便,假设界面文件为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节的httphandlers添加下面一行:

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

现在打开浏览器,访问http://localhost/dlltest/dlltest3.aspx试试。

五、一点小技巧

在设置“陷阱”把aspx文件转化成cs源文件时,一般是使用copy、paste方法把“完整的编译源”保存在记事本或vs.net或其它asp.net开发环境,再进行整理后保存为cs源文件的。

整理,就是把paste进来的行号信息与“#line”编译指令去掉。如果是手动地删掉这些信息,则会太麻烦,即使是一个简单的如ex2.aspx的文件,也会产生约270行的“完整的编译源”。

我所使用的一个小技巧是:在记事本里,用替换的方法来快速整理。用"/* 行"来全部替换"行",用":*/"来全部替换":",用"// #line 行"来全部替换"#line",替换完成之后,再把“代码陷阱”注释掉,把主类构造函数里设置“依赖文件”的语句全部注释掉,这样就算整理完成了。

 

原载:http://www.west263.com/www/info/22139-1.htm

如何把web站点的所有aspx cs文件编译为dll文件 立即下载

相关推荐

asp.net源程序编译为dll文件并调用的实现过程

很多时候,我们需要将.cs文件单独编译成.dll文件,这就需要使用csc命令将.cs文件编译成.dll动态链接库文件。具体的操作步骤如下: 打开命令窗口->输入cmd到控制台->cd C:WINDOWSMicrosoft.NETFrameworkv1.1.4322 转到vs.net安装的该目录下->执行csc命令csc /target:library File.cs->在该目录下产生一个对应名字的.dll文件(前提:把.cs文件放到C:WINDOWSMicrosoft.NETFrameworkv1.1.4322目录下) csc命令的方式很多,请参考以下 编译 File.cs 以产生 Fil

把aspx文件编译成DLL文件

把aspx文件编译成DLL文件浙江省绍兴市解放北路148号交通大厦六楼 周杰忻 2002-11-12 14:39:19前言Asp.net不是asp的简单升级,而是微软.Net计划中的一个重要组成部分,它依托.Net的多语言与强大的类库支持,引进了服务端HTML控件与WEB控件,自动处理控件的客户端与服务端的交互,为开发人员提供

风雨斋 1312

【simulink模型】独立悬架振动模型,七自由度整车simulink模型

车辆悬架系统的设计对提升车辆行驶平顺性和操纵稳定性具有重要意义。本文构建了独立悬架的振动仿真模型以及七自由度整车动力学模型,基于 Simulink 平台实现对模型的动态响应仿真。通过对比不同工况下的车辆振动响应,验证了模型的准确性与实用性。研究结果为车辆悬架系统的优化设计提供了有力支持。

2401_84610415的博客 1584

aspx页面引用dll和前段写客户端代码

今天写项目的时候,需要在前台页面写重载一个方法,方法写好的时候,出现了如下的问题: 没有引用此类在网上找了一番评论:找到了如下的解决方案:在<%@ Import namespace=”System.Security.Principal” %>问题成功解决:

小猪快跑 2305

Innovus时钟树综合CTS实战:从原理到signoff的完整指南

时钟树综合(CTS)是数字后端实现中保障同步电路时序收敛的核心环节,其本质是在物理层面构建低偏斜、可控延迟的全局时钟分发网络。它基于静态时序分析(STA)原理,通过平衡clock skew、insertion delay、transition time与功耗面积等多维约束,对抗工艺电压温度(PVT)变异带来的时序不确定性。技术价值在于支撑GHz级高频芯片的setup/hold签核,广泛应用于CPU、GPU、AI加速器等复杂SoC的Innovus后端流程。本文聚焦CTS在Innovus工具链中的工程落地,覆盖

weixin_28523493的博客 224

Cloudflare 5秒盾逆向实战:从503到cf_clearance的全流程拆解(附避坑指南)

本文深入拆解了Cloudflare 5秒盾的完整逆向流程,从首次503响应到最终获取cf_clearance令牌,详细解析了五层挑战机制。文章重点分享了实战中的核心避坑指南,包括时间戳校验、动态图片尺寸获取、会话保持方案选择以及复杂环境检测的应对策略,为开发者提供了一套绕过5秒盾的实用方法论。

weixin_29327977的博客 2302

VS2005,VS2008,VS2010将ASP.NET网站编译成一个DLL文件

分类: C#/ASP.Net 2012-10-09 22:19 1342人阅读 评论(1) 收藏 举报 dllasp.net2010deploymentwebsiteassembly VS在发布网站时,bin目录里为所有cs生成的dll文件每次都是随机命名的,如:App_Web_xxxxxxxx.dll(xxxxxxx是 8个小写的字母和数字组成的字符串,随机的),这样对更新 L...

weixin_30642305的博客 198

【技术拆解】Illumina边合成边测序(SBS)核心流程全解析 | 从文库构建到数据分析

本文深入解析了Illumina边合成边测序(SBS)技术的完整流程。从DNA样本的文库构建(片段化、加接头、扩增),到Flowcell上的簇生成(桥式PCR),再到核心的边合成边测序(SBS)循环(荧光标记、可逆终止),最后简述了从原始数据到生物学洞见的数据分析步骤,为理解这一主流高通量测序技术提供了清晰的框架。

weixin_29201859的博客 536

把aspx文件编译成DLL文件实战

前言Asp.net不是asp的简单升级,而是微软.Net计划中的一个重要组成部分,它依托.Net的多语言与强大的类库支持,引进了服务端HTML控件与WEB控件,自动处理控件的客户端与服务端的 交互,为开发人员提供了类似Windows下窗口编程的界面,为开发大型网络应用程序功能提供了良好的编程接口,也能够极大地提高开发人员的工作效率。然而,"一次转换,两次编译"过程使得aspx文件在首次执行(或更新

网逸人耕地 1544

ESP32-CAM图像糊成马赛克?OV2640参数调优保姆级教程(亮度/对比度/饱和度)

本文提供了一份详细的ESP32-CAM图像调优教程,针对OV2640摄像头常见的图像模糊问题,从分辨率设置、亮度/对比度/饱和度调整到高级寄存器配置,帮助用户优化网页显示画质。通过代码示例和实用技巧,解决马赛克、色彩暗淡等问题,提升摄像头性能。

weixin_30410119的博客 596

OmniDrive(3):逐行代码详解

模型效果: 端到端联合规划与推理 接下来,简单介绍下训练的配置 1.1 模型配置 模型基于sparse query based的3D Bev感知框架StreamPetr ,用query来编码动态目标(如车辆、行人)和静态地图元素(如车道线)。(1) tran、test和val数据配置 指定真值的文件路径: ann_file 指定输出处理的pipeline: 训练使用, test 和val使用 指定是否需要时序训练seq_mode (2)数据处理pipeline 自定义的Dataset 通过类实现,训

@bangbang的博客 720

把aspx文件编译成DLL文件(1)

前言Asp.net不是asp的简单升级,而是微软.Net计划中的一个重要组成部分,它依托.Net的多语言与强大的类库支持,引进了服务端HTML控件与WEB控件,自动处理控件的客户端与服务端的

Don't think about what u can do,but do what u wanna do 1310

HTML5+CSS3+JS小实例:焦点图波浪切换动画特效

实例:焦点图波浪切换动画特效。字体图标库:Font Awesome。技术栈:HTML+CSS+JS。

艾恩小灰灰的博客 908

把aspx编译成dll文件

Windows下窗口编程的界面,为开发大型网络应用程序功能提供了良好的编程接口,也能够极大地提高开发人员的工作效率。 然而,“一次转换,两次编译”过程使得aspx文件在首次执行(或更新后首次运行)时显得略有不足,特别是在拥有大量aspx及codebehind的代码文件的应用环境中,把aspx文件编译成DLL(在.Net中,被称为应用程序集)后再发布,省去“一次转换、一次编译”的时间及CPU

fightforlove的专栏 1244

【用unity实现100个游戏之1】制作类元气骑士、挺进地牢——俯视角射击游戏多种射击效果(一)(附源码)

俯视角射击游戏)是一类以俯视视角进行游戏展示的射击游戏。在这种游戏中,玩家控制着一个角色或载具,从俯视的角度上方观察游戏世界,并与敌人进行战斗。这种视角使玩家能够有更好的全局观察和策略性,同时也强调快速反应和精确射击。视角:俯视角度可以是固定的,也可以随着玩家角色的移动而变化,但都允许玩家以全局视角观察整个战场,有利于制定战略和规划行动。射击:玩家通常需要使用各种武器来与敌人进行战斗,包括枪械、爆炸物等。射击动作依赖于玩家的反应速度和准确性。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 7833

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

aspx->cs->dll :在部署后就让所有的aspx处于已经编译成dll的状态

aspx->cs->dll asp.net项目在部署后,aspx文件并没有被编译,这种情形要一直维持到用户第一次访问页面,该页面文件aspx才会转化成cs,并编译成dll,这次访问速度不会很快,但从此以后,所有访问者将得到理想的访问速度。那么如何在部署后就让所有的aspx处于已经编译成dll的状态呢?通过上面的描述我们不难想到,只要把所有页面都访问一遍即可,这个访问有一个简单方法,就是递归项目

冰灯咖啡屋 2687

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

在VS2022中调试ASP.NET项目时修改DLL或ASPX动态页面的原理及实现方法

在VS2022中调试ASP.NET项目时修改DLL或ASPX动态页面的原理及实现方法如下:vs2022中创建asp.net 项目,会自动启动IIS EXPRESS,如何做到修改BIN中DLL源码或网站中ASPX动态页面中断调试?这是什么原理。

6081

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

aspx文件编译成DLL文件的原理

前言Asp.net不是asp的简单升级,而是微软.Net计划中的一个重要组成部分,它依托.Net的多语言与强大的类库支持,引进了服务端HTML控件与WEB控件,自动处理控件的客户端与服务端的 交互,为开发人员提供了类似Windows下窗口编程的界面,为开发大型网络应用程序功能提供了良好的编程接口,也能够极大地提高开发人员的工作效率。 然而,“一次转换,两次编译”过程使得aspx文件在首

平凡酿就非凡 4282

编译asp.net 2.0项目到dll文件 转载

Asp.net不是asp的简单升级,而是微软。Net计划中的一个重要组成部分,它依托。Net的多语言与强大的类库支持,引进了服务端 HTML控件与WEB控件,自动处理控件的客户端与服务端的 交互,为开发人员提供了类似Windows下窗口编程的界面,为开发大型网络应用程序功能提 供了良好的编程接口,也能够极大地提高开发人员的工作效率。 然而,"一次转换,两次编译"过程使得as...

aiqixiao2017的博客 167
上一篇: 【转载】C#向Excel报表中插入图片的2种方法
下一篇: 【转载】SQL Server性能调教系列(4)--Profiler(上)
kevindend
博客等级 码龄19年 17粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值