ASP.NET 网站预编译概述

news/2024/5/14 12:08:22/文章来源:https://blog.csdn.net/weixin_33749131/article/details/94543182

默认情况下,在用户首次请求资源(如网站的一个页)时,将动态编译 ASP.NET 网页和代码文件。第一次编译页和代码文件之后,会缓存编译后的资源,这样将大大提高随后对同一页提出的请求的效率。

ASP.NET 还可以预编译整个站点,然后再提供给用户使用。这样做有很多好处,其中包括:

  • 可以加快用户的响应时间,因为页和代码文件在第一次被请求时无需编译。这对于经常更新的大型站点尤其有用。

  • 可以在用户看到站点之前识别编译时 Bug。

  • 可以创建站点的已编译版本,并将该版本部署到成品服务器,而无需使用源代码。

预编译选项

ASP.NET 提供了两个预编译站点选项:

  • 预编译现有站点。如果您希望提高现有站点的性能并对站点执行错误检查,那么此选项十分有用。

  • 针对部署预编译站点。此选项将创建一个特殊的输出,您可以将该输出部署到成品服务器。

另外,可以预编译一个站点,使它成为只读的或可以更新的站点。以下部分提供了有关每个选项的更多详细信息。

就地预编译

您可以通过预编译网站来稍稍提高网站的性能。对于经常更改和补充 ASP.NET 网页及代码文件的站点则更是如此。在这种内容不固定的网站中,动态编译新增页和更改页所需的额外时间会影响用户对站点质量的感受。

Note注意

预编译现有站点可以高效地执行当用户从您的站点请求页时发生的同样编译过程。因此,主要的性能改进在于在第一次请求页时无需对该页进行编译。

在执行就地预编译时,将编译所有 ASP.NET 文件类型。(HTML 文件、图形和其他非 ASP.NET 静态文件将保持原状。)预编译过程的逻辑与 ASP.NET 进行动态编译时所用的逻辑相同,说明了文件之间的依赖关系。在预编译过程中,编译器为所有可执行输出创建程序集,并将这些程序集放在 %SystemRoot%\Microsoft.NET\Framework\版本\Temporary ASP.NET Files 文件夹下的特殊文件夹中。随后,ASP.NET 将通过此文件夹中的程序集来完成页请求。

如果再次预编译站点,那么将只编译新文件或更改过的文件(或那些与新文件或更改过的文件具有依赖关系的文件)。由于编译器的这一优化,因此,即使是在细微的更新之后也可以编译站点。

针对部署的预编译

预编译站点的另一个用处是生成可部署到成品服务器的站点的可执行版本。针对部署进行预编译将以布局形式创建输出,其中包含程序集、配置信息、有关站点文件夹的信息以及静态文件(如 HTML 文件和图形)。

编译站点之后,可以使用 Windows XCopy 命令、FTP、Windows 安装等工具将布局部署到成品服务器。布局在部署完之后将作为站点运行,且 ASP.NET 将通过布局中的程序集来完成页请求。

针对部署预编译站点为您的源代码和其他知识产权提供了保护措施。有关编译器在针对部署的编译过程中如何处理文件的更多信息,请参见针对部署的站点编译过程中的文件处理。

您可以按照以下两种方式来针对部署进行预编译:仅针对部署进行预编译,或者针对部署和更新进行预编译。

仅针对部署进行预编译

当仅针对部署进行预编译时,编译器实质上将基于正常情况下在运行时编译的所有 ASP.NET 源文件来生成程序集。其中包括页中的程序代码、.cs 和 .vb 类文件以及其他代码文件和资源文件。编译器将从输出中移除所有源代码和标记。在生成的布局中,为每个 .aspx 文件生成编译后的文件(扩展名为 .compiled),该文件包含指向该页相应程序集的指针。

要更改网站(包括页的布局),必须更改原始文件,重新编译站点并重新部署布局。唯一的例外是站点配置;您可以更改成品服务器上的 Web.config 文件,而无需重新编译站点。

此选项不仅为您的页提供了最大程度的保护,还提供了最佳启动性能。

针对部署和更新进行预编译

当针对部署和更新进行预编译时,编译器将基于所有源代码(单文件页中的页代码除外)以及正常情况下用来生成程序集的其他文件(如资源文件)来生成程序集。编译器将 .aspx 文件转换成使用编译后的代码隐藏模型的单个文件,并将它们复制到布局中。

使用此选项,可以在编译站点中的 ASP.NET 网页之后,对它们进行有限的更改。例如,可以更改控件的排列、页的颜色、字体和其他外观元素。您还可以添加不需要事件处理程序或其他代码的控件。

当站点第一次运行时,为了从标记创建输出,ASP.NET 将执行进一步的编译。

Note注意

预编译的可更新网站不允许多个页引用相同的 CodeFile 类。

预编译子应用程序

预编译网站只是对该站点进行编译,而不会编译所有子站点。如果网站包含在 IIS 中标记为应用程序的子文件夹,则当预编译父文件夹时,不会编译子应用程序。

执行预编译

可以在命令行上使用 Aspnet_compiler.exe 工具预编译网站。有关更多信息,请参见如何:预编译 ASP.NET 网站以进行部署和 ASP.NET 编译工具 (Aspnet_compiler.exe)。

某些可视化设计器(如 Visual Studio)包括从 IDE 内预编译网站的命令。 有关更多信息,请参见 如何:为预编译网站发布和签名程序集 和 如何:发布和生成固定程序集名称 和 如何:发布网站 (Visual Studio).

有一条编码限制适用于您打算编译的、启用了源保护的网站。基页类(代码隐藏类)可以使用完全限定类名来引用相关联的页类(.aspx 文件)和页类成员。不过,在预编译启用了源保护的网站时,此种引用不起作用。这是因为代码隐藏文件中的基页类与 .aspx 页派生的页类不在相同的程序集中。有关启用了源保护的预编译的更多信息,请参见如何:为预编译网站的程序集签名。

请参见

任务

如何:预编译 ASP.NET 网站以进行部署

概念

ASP.NET 预编译期间的文件处理

预编译选项

ASP.NET 提供了两个预编译站点选项:

  • 预编译现有站点。如果您希望提高现有站点的性能并对站点执行错误检查,那么此选项十分有用。

  • 针对部署预编译站点。此选项将创建一个特殊的输出,您可以将该输出部署到成品服务器。

另外,可以预编译一个站点,使它成为只读的或可以更新的站点。以下部分提供了有关每个选项的更多详细信息。

就地预编译

您可以通过预编译网站来稍稍提高网站的性能。对于经常更改和补充 ASP.NET 网页及代码文件的站点则更是如此。在这种内容不固定的网站中,动态编译新增页和更改页所需的额外时间会影响用户对站点质量的感受。

Note注意

预编译现有站点可以高效地执行当用户从您的站点请求页时发生的同样编译过程。因此,主要的性能改进在于在第一次请求页时无需对该页进行编译。

在执行就地预编译时,将编译所有 ASP.NET 文件类型。(HTML 文件、图形和其他非 ASP.NET 静态文件将保持原状。)预编译过程的逻辑与 ASP.NET 进行动态编译时所用的逻辑相同,说明了文件之间的依赖关系。在预编译过程中,编译器为所有可执行输出创建程序集,并将这些程序集放在 %SystemRoot%\Microsoft.NET\Framework\版本\Temporary ASP.NET Files 文件夹下的特殊文件夹中。随后,ASP.NET 将通过此文件夹中的程序集来完成页请求。

如果再次预编译站点,那么将只编译新文件或更改过的文件(或那些与新文件或更改过的文件具有依赖关系的文件)。由于编译器的这一优化,因此,即使是在细微的更新之后也可以编译站点。

针对部署的预编译

预编译站点的另一个用处是生成可部署到成品服务器的站点的可执行版本。针对部署进行预编译将以布局形式创建输出,其中包含程序集、配置信息、有关站点文件夹的信息以及静态文件(如 HTML 文件和图形)。

编译站点之后,可以使用 Windows XCopy 命令、FTP、Windows 安装等工具将布局部署到成品服务器。布局在部署完之后将作为站点运行,且 ASP.NET 将通过布局中的程序集来完成页请求。

针对部署预编译站点为您的源代码和其他知识产权提供了保护措施。有关编译器在针对部署的编译过程中如何处理文件的更多信息,请参见针对部署的站点编译过程中的文件处理。

您可以按照以下两种方式来针对部署进行预编译:仅针对部署进行预编译,或者针对部署和更新进行预编译。

仅针对部署进行预编译

当仅针对部署进行预编译时,编译器实质上将基于正常情况下在运行时编译的所有 ASP.NET 源文件来生成程序集。其中包括页中的程序代码、.cs 和 .vb 类文件以及其他代码文件和资源文件。编译器将从输出中移除所有源代码和标记。在生成的布局中,为每个 .aspx 文件生成编译后的文件(扩展名为 .compiled),该文件包含指向该页相应程序集的指针。

要更改网站(包括页的布局),必须更改原始文件,重新编译站点并重新部署布局。唯一的例外是站点配置;您可以更改成品服务器上的 Web.config 文件,而无需重新编译站点。

此选项不仅为您的页提供了最大程度的保护,还提供了最佳启动性能。

针对部署和更新进行预编译

当针对部署和更新进行预编译时,编译器将基于所有源代码(单文件页中的页代码除外)以及正常情况下用来生成程序集的其他文件(如资源文件)来生成程序集。编译器将 .aspx 文件转换成使用编译后的代码隐藏模型的单个文件,并将它们复制到布局中。

使用此选项,可以在编译站点中的 ASP.NET 网页之后,对它们进行有限的更改。例如,可以更改控件的排列、页的颜色、字体和其他外观元素。您还可以添加不需要事件处理程序或其他代码的控件。

当站点第一次运行时,为了从标记创建输出,ASP.NET 将执行进一步的编译。

Note注意

预编译的可更新网站不允许多个页引用相同的 CodeFile 类。

预编译子应用程序

预编译网站只是对该站点进行编译,而不会编译所有子站点。如果网站包含在 IIS 中标记为应用程序的子文件夹,则当预编译父文件夹时,不会编译子应用程序。

执行预编译

可以在命令行上使用 Aspnet_compiler.exe 工具预编译网站。有关更多信息,请参见如何:预编译 ASP.NET 网站以进行部署和 ASP.NET 编译工具 (Aspnet_compiler.exe)。

某些可视化设计器(如 Visual Studio)包括从 IDE 内预编译网站的命令。 有关更多信息,请参见 如何:为预编译网站发布和签名程序集 和 如何:发布和生成固定程序集名称 和 如何:发布网站 (Visual Studio).

有一条编码限制适用于您打算编译的、启用了源保护的网站。基页类(代码隐藏类)可以使用完全限定类名来引用相关联的页类(.aspx 文件)和页类成员。不过,在预编译启用了源保护的网站时,此种引用不起作用。这是因为代码隐藏文件中的基页类与 .aspx 页派生的页类不在相同的程序集中。有关启用了源保护的预编译的更多信息,请参见如何:为预编译网站的程序集签名。

请参见

任务

如何:预编译 ASP.NET 网站以进行部署

概念

ASP.NET 预编译期间的文件处理

转载于:https://www.cnblogs.com/valens/archive/2007/08/22/864692.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_771840.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java实现手机扫描二维码后网站跳转新页面

java实现手机扫描二维码后网站跳转新页面,提供zxing和hutools的方式实现二维码的生成,动态刷新,验证跳转功能。 1.效果图: 二维码设置有效时间 失效重新获取二维码 手机扫描二维码成功后网站跳转新页面 2.后端代码: …

ASP.net构建大型网站

记得很多朋友问过我如何构建一个大型的.net网站.这里值得讨论的问题是----多大 ,公司曾经需要我给他们做一个每天有1000万人次访问的门户网站.而我却一直都没有开始动手做...原因很简单,,做一个这样的网站,经费少于300万是不够的.因此需求分析和启动资金成为了规划开始的关键. …

使用Varnish代替Squid做网站缓存加速器的详细解决方案

我曾经写过一篇文章──《初步试用Squid的替代产品──Varnish Cache网站加速器》,但当时仅仅是用着玩,没做深入研究。  今天写的这篇关于Varnish的文章,已经是一篇可以完全替代Squid做网站缓存加速器的详细解决方案了。网上关于Varnish的资…

LAMP网站架构方案分析

LAMP(Linux-Apache-MySQL-PHP)网站架构是目前国际流行的Web框架,该框架包括:Linux操作系统,Apache网络服务器,MySQL数据库,Perl、PHP或者Python编程语言,所有组成产品均是开源软件&a…

网站安全演讲稿

主要包括HTML字符破坏、外部提交、SQL注入、XSS跨站攻击等几个方面。

大型互联网网站架构心得

我们知道,对于一个大型网站来说,可伸缩性是非常重要的,怎么样在纵向和横向有良好的可伸缩性,就需要在做架构设计的时候考虑到一个分的原则,我想在多个方面说一下怎么分: 首先是横向的分:1. 大的…

.net core 跳转页面_网站怎么做404页面,以及网站怎样绑定多个域名

为了使网站更好地为用户浏览和更好的体验,有时用户在打开网站时会有一些错误页面。 这时,我们必须在网站中创建一个404页面以跳转到该网站的首页,这对于保留用户是有好处的,同时有效地告诉搜索索引这些页面已经消失了!…

网站可以如此复制?

论坛中碰到如此问题:我们做了一个网站,域名是www.3322173.com 没想到今天忽然发现了www.qiepeng.cn的内容和我们的是一模一样...内容也是同步更新,只是把内容中3322173.com替换成qiepeng.cn 我关闭我自己的IIS后,两个域名都不能访问了. 我郁闷啊,这是什么样的技术哦…

一步步构建大型网站架构

一步步构建大型网站架构 之前我简单向大家介绍了各个知名大型网站的架构,MySpace的五个里程碑、Flickr的架构、YouTube的架构、PlentyOfFish的架构、WikiPedia的架构。这几个都很典型,我们可以从中获取很多有关网站架构方面的知识,看了之后你…

Anonymous几天之内攻陷500多个中国网站

根据CNET的报道,Anonymous***激进组织已经在几天之内黑掉了超过500个中国政府/商业网站,并号召中国***加入他们。 The hacked Web site for the Central Business District in Chengdu, China. (Credit: Screenshot by Steven Musil/CNET)

烂泥:使用火狐解决网站图片不能复制下载的问题

本文首发于:烂泥行天下www.lanni654321.com由LureDresswww.luredress.com提供赞助 由于博客的需要,需要转载和下载一些网络上的图片,比如最近在阿里巴巴上看到的图片。想下载一些图片,但是阿里巴巴禁用鼠标的右键功能。网络上也有…

Java实现网站请求流量分析统计

如上图所描绘的,在不断刷新test.html请求页面时,上图total.html页面会实时的更新(1秒响应更新一次),折线图会实时进行上下变动。其中需要导入echarts.min.js和jquery-3.5.1.min.js和fastjson-1.2.53.jar包。 0.首先是…

从vancl看垂直商业网站的崛起

如果说2007年IT业内的几大事件,卖衬衣的卖火了,这肯定是2007年的重大事件之一。提起卖衬衣的,大家肯定会想到的是PPG,但我为什么不拿PPG做标题呐?我认为PPG并不是真正的互联网公司,PPG只是打了一个网络直销…

55个漂亮的蓝色风格网站设计作品欣赏(上篇)

蓝色是光的三原色中的一元,是最冷的色彩,非常纯净,通常让人联想到海洋、天空、水、宇宙。纯净的蓝色表现出一种美丽、冷静、理智、安详与广阔。今天,本文收集了一些优秀的蓝色风格的网站设计作品与大家分享,一起欣赏。…

大型电子商务网站架构求解

这是一个技术提问帖,更是一个技术回复分享帖!希望有经验的朋友能够不吝赐教,让我们能在回复中分享到技术!同样希望管理员同志不要将此贴移出首页区,在讨论中学习和分享知识也是一种学习的方式,不是吗?---------------------------------华丽的分割线-------------------------…

Apache主导全美100大网站

随着同 IIS 的竞争以及 Lighttpd 的崛起,关于 Apache 市场下滑的声音不绝于耳,但 Pingdom 的统计表明,Apache仍然主导全美100大网站,占据了49%的市场份额。在 Pingdom 检测的众多网站中,Web服务器的使用五花八门&…

Wordpress Seo 优化的几个建议

WordPress SEO一直是大家很关系的问题,我们也曾经发过WordPress SEO 完全指南,那篇文章系统而详细的见解了如何对WordPress进行优化,今天Wopus中文平台的SEO顾问swsw007给大家分享他的一些WordPress SEO的技巧。一、3步把wordpress打成seo良好…

年度盛宴——2012年排名前20的 HTML5 应用和网站作品

过去的2012年,Web 领域有众多新变化:HTML5 将在2014年成为推荐标准;W3C 任命了4位新编辑来管理 HTML5 规范并托管到 Github 上面;WHATWG 继续致力于活动的 HTML 标准(Living Standard)。 您可能感兴趣的相关…

android客户端和网站数据交互的实现(基于Http协议获取数据方法)

android客户端一般不直接访问网站数据库,而是像浏览器一样发送get或者post请求,然后网站返回客户端能理解的数据格式,客户端解析这些数据,显示在界面上,常用的数据格式是xml和json。 可以理解客户端其实是一个你自己定…

ASP.NET网站管理工具的初始配置

ASP.NET 网站管理工具是ASP.NET2.0以来VS提供的操作Web.config的GUI.使用起来比直接编辑Web.config方便一些.但初始化配置时会遇到以下麻烦. 参考几个blog和俺自己的实验,总结点东西写写. 1、打开ASP.NET网站管理工具 有两个方法可以打开这个工具。 (1&#xff…