解决ASP.NET网站单独发布指定页面问题

目录

前提

开始

aspx.cs文件放到单独的类库项目

一个可选择勾选页面的发布工具:LimusicAddin

前提

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。如图所示:

开始

来到新公司的这段时间,经常听到同事们抱怨:只是改了几个页面,每次都要将整个网站发布一遍,然后从上百个文件中仔细的挑选自己改的那几个页面。

仔细想想,以前开发的网站都是客户定制的,网站一交付,基本就不会再修修改改了,或者根本就不发布网站,直接把源码放到IIS中,故不会频繁发布网站。

来到新公司之后,开发的是公司自己的在线产品,经常需要对网站升级、修改,因而需频繁的发布网站。

对需要频繁发布网站的团队来说,vs自带的发布网站工具,带来的痛苦有:

a、每次需整个发布一遍,特别耗时间。页面越多,预编译就越慢。

b、需要仔细挑出自己修改过的aspx页面和bin下对应的dll文件。同样是:页面越多,越不容易找到,特别是dll。

听说博客园博客程序中.aspx和.ascx文件总共加起来有3000多个,使用fixednames编译需要30分钟,呵呵~~

那怎么办呢?

以下提供两种解决方法:

aspx.cs文件放到单独的类库项目

将所有的aspx.cs文件集中放到同一类库项目下,意味着你揽了ASP.NET预编译的活。也就是说预编译给每个页面生成的代码,你需要自己手写。

先来对比一下正常发布,页面文件内容的变化:

Web.config设置:

Default.aspx:

发布前:

发布后:

Default.aspx.cs:

发布前:

发布后(用.Net Reflector打开bin目录下对应的dll):

由此可见,预编译做的工作:

  1. 为每个页面单独生成一个dll,并在class中为页面上所有服务端空间,声明一个以id命名的控件全局变量。(页面中不用服务端控件,全部是原生的html开发,此可忽略)
  2. 解析web.config中的设置。例如:page节点、profile节点。(可以用基类代替page节点设置,可以用全局变量代替profile设置,或者写到appsetting节点下)
  3. 编译global.asax成App_global.asax.dll。(不用global.asax,所有的事件方法都是在HttpModule中定义)
  4. 编译app_code成app_code.dll。web.config中的Profile节点生成在app_code中的ProfileCommon中。(基本没用过profile,通常使用公共静态属性代替)

Demo:

  1. 打开vs,新建一个网站。
  2. 添加一个类库项目:AspxCsCode,并添加System.Web的引用
  3. 为网站添加类库项目的引用。
  4. 以上述Default.aspx为例,将Default.aspx.cs剪切到AspCsCode项目中。如下图:
  5. 修改Default.aspx.cs代码:

  6. 修改Default.aspx

  7. 生成网站。在浏览器中查看default.aspx

    点击登录è

总结

优点:

  1. aspx与cs分离了。aspx完全可以交给前端工程师,Cs交给后端工程师,分工更明确,开发效率更高。
  2. 支持单元测试。以往开发页面,想测试aspx.cs中某个方法,只能浏览页面。如果放到类库项目下,单元测试将变得很方便
  3. 网站发布时很快。编译类库项目是相当快的。如果没用到Global.asax和App_Code的话,基本上都不需要发布了。

缺点:

  1. 揽了ASP.NET预编译的活。如果项目中不用服务端控件,这个基本可以忽略
  2. 发布的时候,有覆盖他人页面的风险。跟团队成员讨论,部分人觉得,把所有页面的cs文件放到一个类库项目中,

    当我修改了a.aspx.cs,b.aspx.cs也被别人修改时或者还没有被签入,我没有获取最新版本,然后就把类库编译成的dll,更新到服务器上从

    而会出现问题,更偏好Asp.net预编译生成的一个页面对应一个dll的方式,只发布自己改的文件,将影响面积降到最低。

    个人觉得这个缺点的理由不够充分,既然要发布,那就必须保证你编译的所有代码版本不应该比服务器上的版本低,

    如果这个保证不了,那怎么能保证页面引用的其他dll是最新的呢,而且如果照上述逻辑,

    asp.net mvc岂不是也有这种情况?给每个cs都单独生成一个dll岂不更好?

    故而认为,不管哪种方式都有覆盖他人代码的风险,只是这种方式风险稍微大些。

一个可选择勾选页面的发布工具:LimusicAddin

aspx.cs文件放到单独的类库项目 其实是一种变通的方法,本质上并没有解决vs自带的发布网站工具每次都要预编译整个网站的缺陷。那只能自己开发个插件了。

其中涉及到几个技术点:

    1. VS插件开发。推荐阅读:Visual Studio 2008 可扩展性开发
    2. asp.net 预编译。使用aspnet_comlier.exe(在目录:C:\Windows\Microsoft.NET\Framework\v4.0.30319 ) 来发布网站。推荐阅读:

      ASP.NET 编译工具

      例如:

      aspnet_compiler -p c:\website -c -v c:\PrecomplierWeb -fixednames –u

      参数说明:

      LimusicAddin 使用说明:

      1. 下载LimusicAddin压缩包
      2. 复制文件:LimusicAddin.AddIn和LimusicAddin.dll到[My documents]/VS2010/Addins下
      3. VS打开一个网站,右键—自定义发布。如下图:

ASP.NET网站单独的更多相关文章

  1. ASP.Net网站程序在编译发布部署后的后期修改

    ASP.Net网站程序在发布部署后的后期修改 作者:东篱南山 这里说的后期修改是指网站编译发布并部署好之后,对程序进行的修改,即在不能更改现有代码的情况下,更改页面的显示或是更改业务逻辑.一般是在程序 ...

  2. 26种提高ASP.NET网站访问性能的优化方法 .

    1. 数据库访问性能优化 数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源. ASP.NET中提供了连接池 ...

  3. 如何在IIS6,7中部署ASP.NET网站

    http://www.cnblogs.com/fish-li/archive/2012/02/26/2368989.html 阅读目录 开始 查看web.config文件 在IIS中创建网站 IIS6 ...

  4. 如何在IIS6,7中部署ASP.NET网站(转载)

    查看web.config文件 web.config通常会放在网站的根目录,这个文件中包含了一最重要的网站运行参数.比如: connectionStrings,httpHandlers,httpModu ...

  5. ASP.NET 网站管理工具

    ylbtech-Miscellaneos:ASP.NET 网站管理工具 1. 网站管理工具概述返回顶部 网站管理工具概述 介绍 使用网站管理工具,可以通过一个简单的 Web 界面来查看和管理网站配置. ...

  6. 提高ASP.NET网站性能的方法

    http://www.360doc.com/content/14/0705/18/7662927_392224856.shtml   Asp.NET有许多秘密,当你了解了这些秘密后,可以使得你的ASP ...

  7. 在IIS6,7中部署ASP.NET网站[转]

    阅读目录 开始 查看web.config文件 在IIS中创建网站 IIS6 添加扩展名映射 IIS6 无扩展名的映射 目录的写入权限 SQL SERVER的配置 在IIS7中部署ASP.NET程序 8 ...

  8. 在IIS6,7中部署ASP.NET网站

    查看web.config文件 ASP.NET网站与一般的桌面程序不同,不是拷贝过来就能运行的(数据库连接除外). 要想运行它,通常需要一些配置过程.但是,我们到底需要配置什么呢?答案是:查看web.c ...

  9. Jenkins持续集成(下)-Jenkins部署Asp.Net网站自动发布

    环境:Windows 2008 R2.Jenkins2.235.1.Visual Studio 2017: 概要 前面写过一篇文章,<自动发布-asp.net自动发布.IIS站点自动发布(集成S ...

随机推荐

  1. MyEclipse10.0 集成 SVN

    一:下载服务端和client工具   服务端安装工具:Setup-Subversion-1.6.5.msi client安装工具:TortoiseSVN 下载地址:http://subclipse.t ...

  2. SOA(面向服务的架构)

    前言:SOA(面向服务的架构)是目前企业应用开发过程中普遍采用的技术,基于MVC WebAPI三层分布式框架开发,以此适用于企业信息系统的业务处理,是本文论述的重点.此外,插件技术的应用,富客户端JQ ...

  3. 编译器神vim改头换面

    我相信,农民听到两件神器码,首先emacs,首先vim.大家都知道e党和v党总是吵架.竟,这无助于嘈杂.只是每个人都有自己的道理也适用.在接触vim,同时联系emacs.对于作家,我认为vim更适合. ...

  4. AspNet.WebAPI.OData.ODataPQ实现WebAPI的分页查询服务-(个人拙笔)

    AspNet.WebAPI.OData.ODataPQ 这是针对 Asp.net WebAPI OData 协议下,查询分页.或者是说 本人在使用Asp.Net webAPI 做服务接口时写的一个分页 ...

  5. Android Fragment与Activity之间的数据交换(Fragment从Activity获取数据)

    Fragment与Activity之间的数据交换,通常含有3: 一.Fragment从Activity获取数据(仅本文介绍了一个第一): 两.Activity从Fragment获取数据: 三.Frag ...

  6. 从头开始学JavaScript (五)——操作符(二)

    原文:从头开始学JavaScript (五)--操作符(二) 一.乘性操作符 1.乘法:*      乘法操作符的一些特殊规则: 如果操作数都是数值,按照常规的乘法计算,如果乘积超过了ECMAscri ...

  7. linux_ Redhat Linux配置JDK和Tomcat需要注意的地方

    转:http://blog.csdn.net/hongdi/article/details/10525797 1.操作系统和安装包操作系统:Redhat Linux 6.4服务器版,桌面安装JDK:j ...

  8. cocos2dx 3.0正式版 于mac在新建项目

    下载cocos2dx 3.0正式版,和安装python2.7.*版本号. 加入cocos命令: mac下: 在cocos2d-x\tools\cocos2d-console\bin文件夹下.执行ins ...

  9. TDD(测试驱动开发)学习二:创建第一个TDD程序

    本节我们将学习一些测试驱动开发环境的搭建,测试驱动开发概念和流程.所涉及的内容全部会以截图的形式贴出来,如果你也感兴趣,可以一步一步的跟着来做,如果你有任何问题,可以进行留言,我也会很高兴的为你答疑. ...

  10. Pki原则

    核心提示: 公开密钥和公开密钥证明书,产生的私钥client要么server证书.加密的公共密钥才能解密私钥文件只.私钥只能解密公开的加密文件.公众认为,它是开放的.所有的人都能够得到它.私人还表明, ...