[转][ASP.NET]ASP.NET 预编译网站
[转自]https://msdn.microsoft.com/zh-cn/library/ms227430(v=vs.80).aspx
C:\Windows\Microsoft.NET\Framework\v4.0.30319>aspnet_compiler -v /test
ASP.NET 提供了两种用于预编译网站的模型。本主题讨论这两种预编译模型,并提供有关为 Web 应用程序选择适当模型的指南。
决策矩阵
使用下表来帮助您决定要使用哪种编译模型。本文档后面将对每种编译模型进行更详细的说明。
如果希望 | 使用此编译模型 |
---|---|
快速开发应用程序而不考虑代码的编译。 |
使用默认编译。 |
缩短对网站的首次页请求的响应时间。 |
使用就地编译或部署编译选项之一。 |
分离源代码和用户界面 (UI) 代码。 |
使用可更新 UI 的编译。 |
在不更改源代码的情况下修改 UI 代码。 |
使用可更新 UI 的编译。 |
从成品服务器移除所有源代码和 UI 代码。 |
使用不可更新 UI 的编译。 |
通过替换特定程序集来更新应用程序。 |
使用固定名称的编译。 |
使用具有强名称的程序集提高应用程序的安全性。 |
使用签名的程序集编译。 |
默认编译
无需对 ASP.NET 应用程序执行任何手动编译。默认情况下,ASP.NET 运行库在 Web 浏览器首次请求应用程序中的页时编译 Web 应用程序。如果对应用程序中的文件进行了更改,则在下次请求页时,ASP.NET 运行库将确定已更改的文件的依赖项,并且仅重新编译受更改影响的文件。
优点
使用默认编译的优点包括:
简单易用。ASP.NET 编译器会为您完成所有工作。
当预编译网站所需的额外步骤减慢了开发过程时,默认编译是开发过程中可供选择的最佳编译模型。
缺点
使用默认编译的缺点包括:
在首次请求网站时可能会导致大量延迟。
要求将源代码文件存储在成品服务器上。
对服务器上的网站目录拥有文件系统访问权限的任何人都可以获取源代码和 UI 代码。
何时使用默认编译
在下列情况下使用默认编译:
在开发和测试网站时。
用于主要包含静态信息的网站。
用于不经常更改的网站。
就地编译
可以使用 ASP.NET 编译工具 (Aspnet_compiler.exe) 预编译 Web 应用程序。该编译工具调用 ASP.NET 运行库来编译网站,其方式与用户向网站请求页时的方式相同。
如果对应用程序中的文件进行了更改,可以使用 ASP.NET 编译工具重新编译受影响的文件,也可以在下次向应用程序请求页时重新编译受影响的文件。
有关此编译模型的更多信息,请参见如何:预编译 ASP.NET 网站。
优点
使用就地编译的优点包括:
缩短了网站对首次请求的响应时间。
无需特殊的部署步骤;编译应用程序的过程完全就像从站点请求页一样。
缺点
使用就地编译的缺点包括:
应用程序的所有源代码必须存储在成品服务器上。
对网站目录拥有访问权限的任何人都可以获取源代码和 UI 代码。
何时使用就地编译
在下列情况下使用就地编译:
经常对网站上的页进行更改。
将源代码文件存储在成品服务器上不存在顾虑。
想要缩短首次页请求的响应时间。
可更新 UI 的预编译
通过使用 ASP.NET 编译工具的 -u 开关,可以将源代码(.cs 和/或 .vb 文件以及 .resource 文件)编译为 DLL 并保留 .aspx 文件中的 UI 标记以供更新。
在将网站部署到成品服务器后,无需重新编译整个网站即可对 .aspx 代码进行更改。
有关此编译方法的更多信息,请参见如何:预编译 ASP.NET 网站以进行部署。
优点
可更新 UI 的网站预编译的优点包括:
缩短了网站对首次请求的响应时间。
用户界面开发人员无需重新编译整个网站即可修改网站的外观和行为。
保护应用程序源代码中包含的知识产权,以防止被对网站目录拥有文件系统访问权限的任何人意外看到。
缺点
可更新 UI 的网站预编译的缺点包括:
在部署到成品服务器之前,需要执行单独的编译步骤。
对网站目录拥有访问权限的任何人都可以获取应用程序 UI 代码(.aspx 文件)中包含的知识产权。
多个页不能引用同一 CodeFile 类。
何时使用可更新 UI 的预编译
在下列情况下进行可更新 UI 的应用程序预编译:
UI 设计人员与源代码开发人员独立工作。
源代码包含要加以保护以防被意外看到的知识产权。
不想将源代码存储在成品服务器上。
不可更新 UI 的预编译
ASP.NET 编译工具可将应用程序的所有源代码(包括 UI 文件,如 .aspx 和 .ascx 文件)编译为部署在应用程序的 Bin 目录中的 DLL。
有关此编译方法的更多信息,请参见如何:预编译 ASP.NET 网站以进行部署。
优点
不可更新 UI 的预编译的优点包括:
缩短了网站对首次请求的响应时间。
保护应用程序源代码和 UI 代码中包含的知识产权,以防止被对网站目录拥有访问权限的任何人意外看到。
缺点
不可更新 UI 的预编译的缺点包括:
在部署到成品服务器之前,需要执行单独的编译步骤。
对应用程序 UI 进行很小的改动就需要重新编译整个网站。
何时使用不可更新 UI 的预编译
在下列情况下使用不更新 UI 的网站预编译:
UI 代码中包含要加以保护以防被意外看到的知识产权。
只希望将已编译的 DLL 放在成品服务器。
预编译为固定名称的程序集
ASP.NET 编译工具对编译期间生成的程序集使用随机名称。每次重新编译应用程序,程序集的名称就会更改。
由于程序集名称会更改,因此为维护一个程序集就必须重新部署整个应用程序。通过使用 ASP.NET 编译工具的 -fixednames 开关,可以为应用程序中的每个页分别创建一个程序集。程序集的名称在后续编译时不会更改,因此可以创建只替换已更改的程序集的应用程序 Service Release。
由于使用 -fixednames 开关将为每个页创建一个单独的程序集,因此应限制应用程序中的页数。
有关此预编译方法的更多信息,请参见如何:使用 ASP.NET 编译工具生成固定名称。
优点
预编译为固定名称的程序集的优点包括:
每个程序集的名称不会随着多次编译而更改,因而无需重新部署整个应用程序即可以替换特定的程序集。
对应用程序的次要更新可能更具有针对性。
缺点
预编译为固定名称的程序集的缺点包括:
需要分别为应用程序中的每个页创建一个程序集。这可能会为包含许多页的站点创建大量程序集。
何时预编译为固定名称的程序集
在下列情况下将网站预编译为固定名称的程序集:
需要在不替换整个应用程序的情况下维护 Web 应用程序。
预编译为签名的程序集
可以使用 ASP.NET 编译工具创建可部署到服务器的全局程序集缓存 (GAC) 或应用程序的 Bin 目录中的具有强名称的程序集。使用签名的程序集使得恶意用户更难用恶意代码替换应用程序的程序集。
有关此编译方法的更多信息,请参见如何:为预编译网站的程序集签名。
优点
预编译为签名的程序集的优点包括:
通过使程序集更难被恶意代码替换,签名的程序集提高了应用程序的安全性。
缺点
预编译为签名的程序集的缺点包括:
共享开发环境中的密钥管理可能很复杂。
程序集必须让 ASP.NET 运行库调用 AllowPartiallyTrustedCallersAttribute 属性。
何时预编译为签名的程序集
在下列情况下将网站预编译为签名的程序集:
用户有权访问应用程序目录或 GAC,并且能够替换应用程序的程序集。
希望限制第三方替换代码所生成的程序集的能力。
[转][ASP.NET]ASP.NET 预编译网站的更多相关文章
- ASP.NET MVC5 视图预编译
ASP.NET MVC5 视图预编译 ASP.NET MVC5 视图预编译 关于Razor视图及引擎原理,就不多说了. 这里通俗或者不恰当地说,cshtml视图文件是先编译成dll文件,再通过视图 ...
- Asp.Net Core 禁用预编译
在.NET Core 2 Web API应用程序中,MS VS 2017中的发布到文件夹功能产生: <ProjectAssembly>.PrecompiledViews.dll <P ...
- ASP.NET 动态编译、预编译和 WebDeployment 项目(转)
概述 在 Web 服务器上,既可以部署源文件,也可以部署编译后程序集. 若部署源文件,则当用户访问时,Web 应用程序会被动态编译,并缓存该程序集,以便下次访问. 否则,若部署程序集,Web 应用程序 ...
- 网站优化记录-通过命令预编译Asp.net 网站,成功优化到毫秒级别。
在去年一次项目上线时发现部署的站点首次访问跟回收后响应特别慢.(使用的是vs工具预编译的方式发布),在随后找到解决办法是通过命令预编译Asp.net 网站,成功解决站点响应在毫秒级别. 预编译 ASP ...
- 预编译 ASP.NET 网站以进行部署
预编译 ASP.NET 网站以进行部署和更新 打开一个命令窗口并定位到包含 .NET Framework 的文件夹. .NET Framework 将安装在以下位置. %windir%\Microso ...
- [转]预编译 ASP.NET 网站
转自:如何:预编译 ASP.NET 网站 Visual Studio 2005 预编译 ASP.NET 网站可缩短用户的初始响应时间,因为页在第一次被请求时无需编译.这对于经常更新的大型网站尤其有 ...
- ASP.NET网站发布-允许更新此预编译站点 打勾与不打勾的区别
发布网站时在打开的对话框中,有一个选项是至关重要的,那就是“允许更新此预编译站点”: “允许更新此预编译站点”这一项,默认情况下,前面是打上一个√的,至于要不要打上一个√,是可选的,那么,打勾与不打勾 ...
- ASP.NET 预编译
ASP.NET 预编译概述 https://msdn.microsoft.com/zh-cn/library/bb398860%28v=VS.90%29.aspx 如何:预编译 ASP.NET 网站以 ...
- ASP.NET 预编译命令(解决发布后第一次访问慢问题)
ASP.NET 编译工具 (Aspnet_compiler.exe) 官方说明 新建bat文件 @echo off CD /d C:\Windows\Microsoft.NET\Framewo ...
随机推荐
- js的函数作用域
1.js作用域 //在函数内部声明的变量,如果不加var,则自动变成window的成员//预处理:扫描代码,看到var或者函数就生效./*function f(){a = 8;//var a = 8; ...
- OpenDayLight Helium实验一 OpenDaylight的C/S模式实验
本文基于:OpenDaylight的C/S模式实验而成 C/S 结构,即大家熟知的客户机和服务器结构.它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Ser ...
- zeptojs库解读1之整体框架
首先看的是整体框架, // zepto骨骼,这个函数的作用使得Zepto(slector, context)使用很多$.fn里面的方法 var Zepto = (function(){ // zept ...
- Yii框架(二)Model处理数据
熟悉php的autoload机制,自己实现一个autoload函数 一.复习框架: basic/ 应用根目录 composer.json Composer 配置文件, 描述包信息 config/ 包含 ...
- install ros-indigo-laser-geometry
-- Using these message generators: gencpp;genlisp;genpy CMake Warning at /opt/ros/indigo/share/catki ...
- Android中Tablayout设置下划线宽度 和 dp和px之间进行相互转换
开发中遇到了一个问题,Tablayout设置下换线长度,看了点资料,分享给大家. 效果图: 直接贴代码(要在tabLayout添加完所有的tab后调用) public vo ...
- xssProject在java web项目中应用
注:转载http://337027773.blog.163.com/blog/static/54376980201451133534157/ 1.项目引入xssProtect-0.1.jar.antl ...
- Integer与int的种种比较你知道多少
如果面试官问Integer与int的区别:估计大多数人只会说道两点,Ingeter是int的包装类,int的初值为0,Ingeter的初值为null. 但是如果面试官再问一下Integer i = 1 ...
- hdu 3268 09 宁波 现场 I - Columbus’s bargain 读题 最短路 难度:1
Description On the evening of 3 August 1492, Christopher Columbus departed from Palos de la Frontera ...
- hdu 6158 The Designer( 反演圆)
The Designer Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...