[转][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 ...
随机推荐
- shell 变量赋值运算
.变量赋值: name=lbg 等号前后不能有空格 name="Lebron James" 变量值中有空格要用双引号 echo ${name} 用${}更保险 shopt -s - ...
- K-Means算法的收敛性和如何快速收敛超大的KMeans?
不多说,直接上干货! 面试很容易被问的:K-Means算法的收敛性. 在网上查阅了很多资料,并没有看到很清晰的解释,所以希望可以从K-Means与EM算法的关系,以及EM算法本身的收敛性证明中找到蛛丝 ...
- uva-11021-全概率公式
https://vjudge.net/problem/UVA-11021 有n个球,每只的存活期都是1天,他死之后有pi的概率产生i个球(0<=i<n),一开始有k个球,问m天之后所有球都 ...
- 51nod1347思维
1347 旋转字符串 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注 S[0...n-1]是一个长度为n的字符串,定义旋转函数Left(S)=S[1… ...
- UVA-1343 The Rotation Game (IDA*)
题目大意:数字1,2,3都有八个,求出最少的旋转次数使得图形中间八个数相同.旋转规则:对于每一长行或每一长列,每次旋转就是将数据向头的位置移动一位,头上的数放置到尾部.若次数相同,则找出字典序最小旋转 ...
- Oracle 9i & 10g编程艺术-深入数据库体系结构-学习笔记(持续更新中)
--20170322 --1.0 --更新表的统计信息begin dbms_stats.set_table_stats(user,'EMP',numrows => 10000);end; beg ...
- React中父子组件间的通信问题
1.https://blog.csdn.net/sinat_17775997/article/details/59103173 (React中父子组件间的通信问题)
- E: 无法获得锁 /var/cache/apt/archives/lock - open (11 资源临时不可用)
事件: 今软件包有更新,进入更新管理器,点击安装更新,出现错误. 错误提示: E: 无法获得锁 /var/cache/apt/archives/lock - open (11 资源临时不可用) E: ...
- POJ 2409 Let it Bead (Polya定理)
题意 用k种颜色对n个珠子构成的环上色,旋转翻转后相同的只算一种,求不等价的着色方案数. 思路 Polya定理 X是对象集合{1, 2, --, n}, 设G是X上的置换群,用M种颜色染N种对象,则不 ...
- thread.event说明
Python中的threading.Event()操控多线程的过程有: - 定义事件:man_talk_event = threading.Event() - 创建线程,传入对应事件:t1 = thr ...