如何充分利用ASP.NET 2.0预编译

原创 2007年10月11日 11:56:00
ASP.NET 1.x的开发人员常常听到用户抱怨首次调用应用程序的时候会碰到初始化延迟。毕竟,初次请求会引发一个系列过程,包括运行库初始化、分析、把ASPX页面编译成中间语言、把方法即时编译成本地代码等等。

  自从ASP.NET面市以来,开发人员一直都在要求(微软)出台一个解决办法,而ASP.NET 2.0利用预编译提供了一个有效的解决方案。

  预编译选项

  在首次启动应用程序的时候,ASP.NET会动态地分析和编译所有的ASP.NET文件(aspx页面)。运行环境要对编译的结果进行缓冲,以便更好地服务未来所有的请求。

  在服务器重启或者Web服务器重启之后,第一次启动应用程序也意味着这一过程要重新开始。而且,对应用程序任何文件的改变都会被系统检测到,而在文件发生改变之后首次运行应用程序也会让这一过程再次发生。

  很多Web开发人员都很讨厌这种初始化延迟。而预编译通过(预先)编译应用程序避免了这种延迟。

  命令行

  通过安装在.NET框架2.0里的aspnet_compiler.exe程序就能够启动预编译。它位于框架安装目录下(版本号会根据安装的框架的版本而有所不同)。下面就是这个程序默认的路径:

  C://Microsoft.NET

  /Framework/v2.0.5072/aspnet_compiler.exe

  您可以用-?这个命令参数查看该程序的所有参数列表,下面我就解释一下一些可用的参数:

  m:这个参数表示您将使用完整的、应用程序将被预编译的IIS元数据库路径。IIS元数据库的路径是/LM/W3SVC/1/Root/应用程序名。

  v:使用需要预编译Web应用程序的虚拟IIS路径。虚拟路径的格式是:/应用程序名。

  p:使用需要预编译Web应用程序的物理IIS路径。它是包括驱动器名和指向应用程序目录的完整路径。举个例子c:/inetpub/wwwroot/应用程序名。v这个参数必须和p一起用,所以编译器能够解析任何应用程序的根参考。

  f:表示目标目录是否要被覆盖。

  u:用来设置预编译完的应用程序是可以更新的。这表示所有的标记文件(ASPX、ASCX等等)都可以在目标目录里进行更新。

  targetDir:用于预编译应用程序文件的目标目录。下面的命令用虚拟路径和指定的目标路径预编译了一个应用程序:aspnet_compiler.exe –v /应用程序名 c:/目标目录名。

  如果没有指定目标目录,那么结果文件会被放在ASP.NET的临时文件目录里,就像在ASP.NET运行库在首次调用应用程序的时候处理编译一样。临时目录默认的路径如下:

  c:/Windows/Microsoft.NET/Framework

  /v2.0.50727/Temporary ASP.NET Files/应用程序名

  预编译另外一个好处是能够捕捉在应用程序启动阶段发生的任何错误。错误会显示在工具里,但是不会终止编译过程。

  隐藏源代码

  预编译的另外一个副产品是能够隐藏任何或者所有的应用程序源代码。这意味着其他的开发人员需要利用反编译程序或者ilasm才能够取得您的代码。这就行了——预编译让您能够以二进制文件的形式分发应用程序。

  目标目录里没有源代码。App_Code文件夹里的所有类都被编译成一个或者多个二进制文件,放到bin目录下;目标目录下不会有源代码文件(.cs、.vb、.js等等)。此外,所有的主页面文件也会被编译到bin目录下,作为隐藏文件。ASPX、ASCX和ASHX文件的所有代码和标记,以及相关的代码隐藏文件都被放在bin目录下的一个或者多个程序集里。

  隐藏源代码是毁誉参半。其他的开发人员无法以任何形式查看或者更改应用程序——即使是Web页面标记也不行。而另外一方面,对应用程序的任何改变(不论大小)都要求改变原始的源代码、重新编译和重新部署。这可能是一个十分耗时的过程,所以并不一定适用于所有的应用程序。

  可更新命令参数(u)让您能够取代这个默认的行为。使用这个参数意味着所有的标记文件(ASPX、ASCX等等)都要包括在预编译过程的输出里。一旦应用程序被部署,这些文件仍然能够用于编辑和更新。在应用程序被应用之后,小的布局问题可以通过源文件来处理,所以这是一个非常理想的参数。

  Visual Studio的支持

  在使用Visual Studio 2005开发基于ASP.NET的应用程序时,预编译是可选的。“发布Web站点(Publish Web Site)”菜单选项让您能够把网站作为一个预编译应用程序推到另一个位置。此外,上面还有一个复选框让您设置可更新选项。

  总结

  ASP.NET 2.0的预编译选项让您能够预编译Web应用程序,以避免(像一般编译一样)首次调用应用程序的延迟。此外,它还提供了一定的安全性,因为程序的源代码在结果中是不可见的,所有的内容文件都可以被隐藏。

 

ASP.NET MVC5 视图预编译

关于Razor视图及引擎原理,就不多说了。 这里通俗或者不恰当地说,cshtml视图文件是先编译成dll文件,再通过视图引擎“解析”成html输出到浏览器。 但mvc编译cshtml是动态...
  • linhongzhi_xp
  • linhongzhi_xp
  • 2016年03月09日 16:52
  • 1018

asp.net 预编译后代码的反编译成源码(演示:鹏为CRM E4版本)

.net 破解新人贴。其实这也不算什么破解,但是对新手来说还是有一定难度滴。。。 很多人会被这样的情况吓到。。   打开后只有一句中文,其他的代码都没有。但是其中有一个很重要的信息,它告诉了我们...
  • u011047160
  • u011047160
  • 2015年06月29日 16:02
  • 1993

asp.net web api 2.0 实现跨域资源共享

asp.net web api 2 对跨域资源共享的支持1. 同源策略:同源策略是浏览器为保证安全最基本的功能, 只有同源的脚本才能够被执行,那么什么是同源呢?同源是指协议,域名以及端口号都相同,任何...
  • zhanxueguang
  • zhanxueguang
  • 2015年07月09日 20:47
  • 1346

Asp.Net MVC5 视图页面编译调用流转过程,以及页面Web展示

当控制器调用Action,返回View的时候。          例如:       public class HomeController : Controller     {         pu...
  • tangyanzhi1111
  • tangyanzhi1111
  • 2017年06月24日 14:32
  • 759

预编译的优点(Statement和PrepareStatement 的区别)

在执行SQL命令时,有二种选择:可以使用PreparedStatement对象,也可以使用Statement对象。 而熟悉JDBC编程的大侠们都会选择使用PreparedStatement对象,...
  • u011921842
  • u011921842
  • 2013年12月04日 22:35
  • 2770

Java通过JDBC实现对数据库的增删查改(预编译方式)

本次试验用的是SQLserver2012,其他数据库只需要更改连接部分,模板仅供参考 加载jdbc驱动,实现数据库连接 package database; /*** * 数据库工具类 */ imp...
  • c1481118216
  • c1481118216
  • 2016年10月17日 14:44
  • 4473

Asp.Net Core 2.0 生成操作数据库文件需要的文件

开发环境 VS2017 + Win7 x64 生成操作数据库文件需要配置或添加的文件 1、Startup.cs public IConfiguration Configuratio...
  • king_hh
  • king_hh
  • 2017年12月29日 16:50
  • 79

C/C++中的预编译指令

程序的编译过程可以分为预处理、编译、汇编三部分,其中预处理是首先执行的过程,预处理过程扫描程序源代码,对其进行初步的转换,产生新的源代码提供给编译器。 预处理过程读入源代码之后,会检查代码里包含的预处...
  • sunshinewave
  • sunshinewave
  • 2016年03月30日 23:17
  • 4176

C/C++预编译指令总结

C/C++中宏总结C程序的源代码中可包括各种编译指令,这些指令称为预处理命令或预处理器。虽然它们实际上不是C语言的一部分,但却扩展了C程 序设计的环境。 预处理指令的主要作用就是把通过预处理的内建功...
  • DevanChen
  • DevanChen
  • 2016年09月06日 13:59
  • 1486

mybatis 防止 sql 注入 和 mybatis 的预编译

今天在项目中遇到了,老项目中 用 jdbc template 实现的sql 中出现sql注入的情况 检查了一下 自己所用的mybatis  会不会有这种情况,收货颇丰,在这跟大家分享一下 ...
  • CCUTwangning
  • CCUTwangning
  • 2017年06月14日 11:33
  • 2065
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何充分利用ASP.NET 2.0预编译
举报原因:
原因补充:

(最多只允许输入30个字)