前言html
开始前端
Asp.net 发布分为:动态编译和预编译。预编译又分为:In Place Pre-compilation 和 Pre-compilation for Deployment。关于asp.net编译,推荐Artech写的:浏览器
深刻剖析ASP.NET的编译原理之一:动态编译(Dynamical Compilation)服务器
深刻剖析ASP.NET的编译原理之二:预编译(Precompilation)前端工程师
本文讲述的编译都是预编译中Pre-compilation for Deployment的Updatable Pre-compilation。如图所示:mvc
来到新公司的这段时间,常常听到同事们抱怨:只是改了几个页面,每次都要将整个网站发布一遍,而后从上百个文件中仔细的挑选本身改的那几个页面。app
仔细想一想,之前开发的网站都是客户定制的,网站一交付,基本就不会再修修改改了,或者根本就不发布网站,直接把源码放到IIS中,故不会频繁发布网站。asp.net
来到新公司以后,开发的是公司本身的在线产品,常常须要对网站升级、修改,于是需频繁的发布网站。
对须要频繁发布网站的团队来讲,vs自带的发布网站工具,带来的痛苦有:
a、每次需整个发布一遍,特别耗时间。页面越多,预编译就越慢。
b、须要仔细挑出本身修改过的aspx页面和bin下对应的dll文件。一样是:页面越多,越不容易找到,特别是dll。
据说博客园博客程序中.aspx和.ascx文件总共加起来有3000多个,使用fixednames编译须要30分钟,呵呵~~
那怎么办呢?
如下提供两种解决方法:
将全部的aspx.cs文件集中放到同一类库项目下,意味着你揽了ASP.NET预编译的活。也就是说预编译给每一个页面生成的代码,你须要本身手写。
先来对比一下正常发布,页面文件内容的变化:
Web.config设置:
Default.aspx:
发布前:
发布后:
Default.aspx.cs:
发布前:
发布后(用.Net Reflector打开bin目录下对应的dll):
因而可知,预编译作的工做:
Demo:
点击登陆è
总结
优势:
缺点:
当我修改了a.aspx.cs,b.aspx.cs也被别人修改时或者尚未被签入,我没有获取最新版本,而后就把类库编译成的dll,更新到服务器上从
而会出现问题,更偏好Asp.net预编译生成的一个页面对应一个dll的方式,只发布本身改的文件,将影响面积降到最低。
我的以为这个缺点的理由不够充分,既然要发布,那就必须保证你编译的全部代码版本不该该比服务器上的版本低,
若是这个保证不了,那怎么能保证页面引用的其余dll是最新的呢,并且若是照上述逻辑,
asp.net mvc岂不是也有这种状况?给每一个cs都单独生成一个dll岂不更好?
故而认为,无论哪一种方式都有覆盖他人代码的风险,只是这种方式风险稍微大些。
aspx.cs文件放到单独的类库项目实际上是一种变通的方法,本质上并无解决vs自带的发布网站工具每次都要预编译整个网站的缺陷。那只能本身开发个插件了。
详细介绍: