.NET如何发布网站之允许更新此预编译站点 使用固定命名和单页程序集
11/7/2010 11:18:37 PM
①允许更新此预编译站点
我们可以通过如下的方法发布VS2008的网站: “生成”→“发布网站”;弹出对话框!在打开的对话框中,有一个选项是至关重要的,那就是“允许更新此预编译站点”;
“允许更新此预编译站点”这一项,默认情况下,前面是打上一个√的,至于要不要打上一个√,是可选的,那么,打勾与不打勾,有何区别呢?
也许大家都曾经发布过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代码标记都看不见,打开这样的文件,里面只有一行文字,内容为“这是预编译工具生成的标记文件,不应被删除!”
但是,网站的访问却是正常的,不会出现任何不良的问题。
所以呢,使用这种方式发布网站,什么文件都不能通过记事本打开,里面显示的都是一行文字,因此,网站文件就非常安全了。
此外,通过此种方法发布的网站,所有内容都编译好了,打开的速度是很快的。
②使用固定命名和单页程序集
默认情况下,当发布网站时,ASP.NET 会使用批编译功能来编译网站:编译器将每个文件夹中的多个源文件的输出合并到每个文件夹的单个程序集中。编译器根据各种不同的因素(包括源文件间的依赖 项)来决定要合并哪些源输出。批编译将生成的名称分配给产生的程序集,而程序集不会直接映射到原始的源文件。有了批编译功能,每次发布网站时都会重新生成 程序集名称。
如果要只发布对网站特定部分的更新而不重新部署整个网站,则批编译所创建的程序集可能不适合于这种
网站。在这种情况下,使用与源文件一对一映射且具有可预知名称的程序集可能会更为方便。在 Visual Web Developer 中发布 ASP.NET 网站时,可以选择为单页程序集生成固定文件名;单页程序集是已编译的程序集,每个单页程序集对应于单个页或用户控件(即 .aspx、.ascx 和 .master 文件)。固定文件名选项也会在您编译和发布网站时保留程序集的名称。对单页程序集使用固定文件名时,将关闭批编译功能以进行预编译。(主题和外观文件以及 不包含页或用户控件的其他文件夹都将继续编译为单个程序集。)选择生成固定程序集名称时,ASP.NET 将执行以下操作:
为应用程序中的每个 .aspx、.ascx 和 .master 文件创建一个程序集。应该限制应用程序中的页数以减少生成的程序集数量。使用页的虚拟路径作为页的程序集的名称。如果虚拟路径长度超过操作系统的文件名长 度限制,该工具将改为使用虚拟路径的哈希。与批编译时一样,将顶层目录(如 App_Code 目录)中的文件编译为单个程序集。