ASP.NET网站的预编译和动态编译


我们通过VS2005~VS2013(VS2015 没有安装,应该会延用),制作并发布网站,有预编译和动态编译两种。

ASP.NET网站的预编译

      如果希望提高现有站点的性能并对站点执行错误检查,那么此选项十分有用。可以通过预编译网站来稍稍提高网站的性能。对于经常更改和补充ASP.NET网页及代码文件的站点则更是如此。在这种内容不固定的网站中,动态编译新增页和更改页所需的额外时间会影响用户对站点质量的感受。在执行就地预编译时,将编译所有的ASP.NET文件类型(HTML文件、图形和其他非ASP.NET静态文件将保持原状)。随后,ASP.NET将通过此文件夹中的程序集来完成页请求。

      那么在预编译网站时,注意有一个选项是至关重要的,那就是“允许更新此预编译站点”,这一项,默认情况下,前面是打上一个√的,至于要不要打上一个√,是可选的,那么,打勾与不打勾,有何区别呢?

      也许大家都曾经发布过net网站,一般情况下,网站项目中的所有CS文件,会自动生成一个DLL动态链接库,这就能够很好的保护网站的源代码,因为代码一般都是放在CS文件里面的,既然都生成了DLL文件,那么,上传到虚拟空间,别人就不能打开来看了!

      但是,其它的文件,诸如ashx、aspx等文件,里面原来有什么,就是什么,别人可以打开这些文件来查看,尽管别人看不见CS代码,但是仍然能够看见ASPX文件里面的HTML代码或部分服务器控件及相关的属性;

      还有,ashx这样的文件,就相当于一个cs文件,里面的代码也是能够看见的。

      因此,cs文件倒是安全了,但是网站中的ASPX、asxh等文件,是不安全的;对于整个网站而言,只有局部的安全,而没有整体的安全。

      那么,到底有没有一种办法,让上传到虚拟空间的网站文件,都安全呢?方法是有的,通过“允许更新此预编译站点”这一项前面的√,就能实现;

①给“允许更新此预编译站点”打√

      如果您给此项打勾,然后发布网站,那么,结果是这样的,整个网站文件,除了所有的CS文件编译成为一个DLL文件之外,其它的文件,和原来的没有任何变化,里面是什么,还是什么,只要别人通过记事本一打开,里面的代码、HTML代码等,都可以让别人一览无余。

  除此之外,通过此种方式发布的网站,当用户第一次访问某个页面的时候,需要经过编译,查找BUG,之后,如果没有任何错误,才能正常访问,因此,速度会变得比较慢。(第二次、第三次……访问,速度就正常了)

②取消“允许更新此预编译站点”前面的√

  如果您在发布网站的时候,取消了“允许更新此预编译站点”前面的勾,那么,结果是这样的:

  1、网站里面的所有CS文件,都被编译成为一个DLL文件;

  2、除了cs文件,其它的文件,诸如ASPX、ASHX等文件,也一同被编译起来,每个文件都在BIN目录里面生成一个对应的*.compiled文件;

  之后,如果您通过记事本查看ASPX、ASHX等文件,里面不会看到任何的代码,就连HTML代码标记都看不见,打开这样的文件,里面只有一行文字,内容为“这是预编译工具生成的标记文件,不应被删除!” 

  但是,网站的访问却是正常的,不会出现任何不良的问题。 

  所以呢,使用这种方式发布网站,什么文件都不能通过记事本打开,里面显示的都是一行文字,因此,网站文件就非常安全了。 

  此外,通过此种方法发布的网站,所有内容都编译好了,打开的速度是很快的。

部署时不同文件类型对应的预编译操作和输出位置

文件类型

预编译操作

输出位置

.aspxascx.master

生成程序集和一个指向该程序集的.compiled文件。原始文件保留在原位置,作为完成请求的占位符

程序集和.compiled文件写入Bin文件夹中。页(去除内容的.aspx文件)保留在其原始位置

.asmx.ashx

生成程序集。原始文件保留在原位置,作为完成请求的占位符

Bin文件夹

App_Code文件夹中的文件

生成一个或多个程序集(取决于Web.config设置)

Bin文件夹

未包含在App_Code文件夹中的.cs.vb文件

与依赖于这些文件的页或资源一起编译

Bin文件夹

Bin文件夹中的现有.dll文件

按原样复制文件

Bin文件夹

资源(.resx)文件

对于App_LocalResourcesApp_GlobalResources文件夹中找到的.resx文件,生成一个或多个程序集以及一个区域性结构

Bin文件夹

App_Themes文件夹及子文件夹中的文件

在目标位置生成程序集并生成指向这些程序集的.compiled文件

Bin文件夹

静态文件(.htm.html、图形文件等)

按原样复制文件

与源中结构相同

浏览器定义文件

按原样复制文件

App_Browsers

依赖项目

将依赖项目的输出生成到程序集中

Bin文件夹

Web.config文件

按原样复制文件

与源中结构相同

Global.asax文件

编译到程序集中

Bin文件夹

部署和更新时不同文件类型对应的预编译操作和输出位置

文件类型

预编译操作

输出位置

.aspxascx.master

对于具有代码隐藏类文件的文件,生成程序集和一个指向该程序集的.compiled文件。将这些文件的单文件版本原封不动地复制到目标位置

程序集和.compiled文件写入Bin文件夹中

.asmx.ashx

按原样复制文件,但不编译

与源中结构相同

App_Code文件夹中的文件

生成一个或多个程序集(取决于Web.config设置)

Bin文件夹

未包含在App_Code文件夹中的.cs.vb文件

与依赖于这些文件的页或资源一起编译

Bin文件夹

 

Bin文件夹中的现有.dll文件

按原样复制文件

Bin文件夹

资源(.resx)文件

对于App_GlobalResources文件夹中的.resx文件,生成一个或多个程序集,以及一个区域性结构

对于App_LocalResources文件夹中的.resx文件,将它们按原样复制到输出位置的App_LocalResources文件夹中

程序集放置在Bin文件夹中

App_Themes文件夹及子文件夹中的文件

按原样复制文件

与源中结构相同

静态文件(.htm.html、图形文件等)

按原样复制文件

与源中结构相同

浏览器定义文件

按原样复制文件

App_Browsers

依赖项目

将依赖项目的输出生成到程序集中

Bin文件夹

Web.config文件

文件被复制

与源中结构相同

Global.asax文件

编译到程序集中

Bin文件夹

对文件进行更改后对网站的影响

文件类型

允许的更改(仅部署)

允许的更改(部署和更新)

静态文件(.htm.html图形文件等)

可以更改、移除或添加静态文件。如果ASP.NET网页引用的页或页元素已被更改或移除,可能会发生错误

可以更改、移除或添加静态文件。如果ASP.NET网页引用的页或页元素已被更改或移除,可能会发生错误

.aspx文件

不允许更改现有的页。不允许添加新的.aspx文件

可以更改 .aspx 文件的布局和添加不需要代码的元素,例如,HTML元素和不带有事件处理程序的ASP.NET服务器控件。还可以添加新的.aspx文件,该文件通常在首次请求时进行编译

.skin文件

忽略更改和新增的.skin文件

允许更改和新增的.skin文件

Web.config文件

允许更改,这些更改将影响.aspx文件的编译。忽略调试或批处理编译选项。

不允许更改配置文件属性或提供程序元素

如果所做的更改不会影响站点或页的编译(包括编译器设置、信任级别和全球化),则允许进行更改。忽略影响编译或使已编译页中的行为发生变化的更改,否则在一些实例中可能会生成错误。允许其他更改

浏览器定义

允许更改和新增文件

允许更改和新增文件

从资源(.resx)文件编译的程序集

可以为全局和局部资源添加新的资源程序集文件

可以为全局和局部资源添加新的资源程序集文件

ASP.NET网站的动态编译

 

为了使用应用程序代码为用户提出的请求提供服务,ASP.NET必须首先将代码编译成一个或多个程序集。程序集是文件扩展名为.dll的文件。可以采用多种不同的语言来编写ASP.NET代码,如Visual Basic、C#、J#和其他语言。当在编译代码时,会将代码翻译成一种名为Microsoft中间语言(MSIL)的与语言和CPU无关的表示形式。运行时,MSIL将运行在.NET Framework的上下文中,.NET Framework会将MSIL翻译成CPU特定的指令,以便计算机上的处理器运行应用程序。

 

动态编译应用程序代码具有许多好处,其中包括:

 

— 性能。编译后的代码的执行速度要比诸如ECMAScript或VBScript的脚本语言快得多,因为它是一种更接近于机器代码的表示形式,并且不需要进行其他分析。

 

— 安全性。编译后的代码要比非编译的源代码更难进行反向工程处理,因为编译后的代码缺乏高级别语言所具有的可读性和抽象性。此外,模糊处理工具增强了编译后的代码对抗反向工程处理的能力。

 

— 稳定性。在编译时检查代码是否有语法错误、类型安全问题,以及其他问题。通过在生成时捕获这些错误,可以消除代码中的许多错误。

 

— 互操作性。由于MSIL代码支持任何.NET语言,因此可以在代码中使用最初用其他语言编写的程序集。例如,如果正在用C#编写ASP.NET网页,可以添加对使用Visual Basic编写的.dll文件的引用。

以上文中有部分内容引用博客园心随风若的文章


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM