在从ASP.NET1.1向2.0迁移的时候在如何生成debug和release的构建(builds)方面做了调整.

1.1

在1.1的时候(对应的IDE是VS2003),在生成(build)菜单下面有一个配置管理器(Configuration Manager)的菜单项.点击这个菜单项会弹出一个对话框,你从中可以选择一些可用的构建配置.VS2003默认情况下提供了Debug和Release这两种配置.在配置管理器(Configuration Manager)中选择的配置信息可以告诉VisualStudio如何编译code-behind文件.成功编译后就会在bin目录中生成一个.dll文件(注:选择Release模式不会生成pdb文件),如果配置的时候需要生成调试符号(Debugging Symbols)的话,还会同时在bin目录中生成一个包含调试符号的后缀名为pdb的文件(注:选择Debug模式生成pdb文件).

稍后,当这个应用程序接收到一个web请求就开始执行时,ASP.NET运行时(runtime)就会为应用程序的web窗体 (web forms)和用户控件(user control)生成代码,并且编译生成的代码(这里的代码应该指的是MSIL代码).运行时的编译(JIT编译)将会根据web.config中compilation节中的调试设置(debug setting)来决定是否编译优化过的代码,是否生成调试信息.ASP.NET将把生成的结果放到临时ASP.NET文件目录中(Temporary ASP.NET file).在VS2003中只有选择Release模式并且同时在web.config中把debug设置为false才能产生真正的不带调试符号的产品.

2.0

在2.0中有一个非常重要的概念就是:VS2005并不知道编译一个web应用程序的任何信息(knows nothing).在1.1中visual studio构建code-behind文件,asp.net则负责构建web窗体.而在2.0中vs2005把所有的编译工作都交给了ASP.NET平台做.

有了这些概念后,这里有两种场景需要探讨:构建一个不带Web站点部署工程 的web应用程序和构建一个带Web站点部署工程的web应用程序.我们先看第一种,当你让Visual Studio构建一个web工程的时候,看起来好像什么都没有发生.你并没有发现在你的工程中创建了一个bin目录,里面有编译好的dll.这是因为现在是ASP.NET而不是Visual Studio来构建的.ASP.NET构建所有的的一切,包括.cs和.vb文件.ASP.NET把结果程序集放到Temporary ASP.NET files目录中,你可以自己打开看看.由于是ASP.NET负责所有的编译工作,所以web.config中间中complilation节的debug设置控制着当前应该是debug模式还是release模式.当debug设置为true的时候,你会发现生成程序集的同时会生成一个保存调试信息的pdb文件.这种新的编译模式使得对于一个web站点项目来说配置管理器已经过时了.在vs2005的配置管理器只能看到debug一个选项.不要着急,这不会有任何问题.实际上web.config中的debug设置控制着这些(和配置管理器没有什么关系).当你打算部署的时候,你可以发布这个网站,构建->发布(Build->Publicsh)将预编译整个web应用程序并且把结果保存在你选择的目录里.你也可以把它发布到IIS或者FTP上.当你选择发布(publish)命令的时候,你会看到一个对话框可以选择目标位置,强命名选项等等.这些选项和命令行工具aspnet_compiler中用到的一些开关是一一对应的.aspnet_compiler工具还提供了是否产生调试符号的开关,但是这个选项在发布(publish)对话框中是不可用的.发布总是预编译一个不包含调试信息的release版本.

注意:发布(publish)命令并不会改变web.config中的debug设置.发布命令总是编译一个release版本.然后,如果你想预编译一个可更新(updateable)站点,以后可以在适当的时候更新站点(这将会导致动态编译),这样的动态编译将会产生debug代码和pdb文件.

新的Web站点部署工程稍微改变了上面所说的场景.WSD在Visual Studio 2005的配置管理器(configuration manager)中添加了Release和Debug的配置.但是这并不意味着Visual Studio知道如何编译web站点.而是,Visual Studio知道如何使用WSD提供的MSBuild文件构建Debug或者Release版本.你现在可以在配置管理器中选择Debug或者Release.这种请求最终还是要交给aspnet_complier执行的,发布命令也是这样的.

和发布命令不同的是,一个WSD的Release构建会改变web.config中的debug设置为false.而且WSD会默认把release构建放到release目录中,把debug构建放到debug目录中,这对于使用.net开发非web form程序的人来说是很熟悉的.

装上Visual Studio 2005 Service Pack 1后就可以创建web应用(web application)了,在VS2005中web应用的编译行为和web站点(web site)又有区别.对于一个web应用工程来说,配置管理器中debug和release两种模式都是可用的,但是不管选择哪种模式,生成的程序集中都会包含一个pdb文件,即使你在web.config中的compilation节的debug设置为false也没有任何作用.选择发布(publish)一个web应用也会带着包含调试符号的pdb文件.那么是不是没有办法发布不带pdb文件的程序集?当然会有办法.在web应用的工程文件属性à生成à高级,你可以看到如下一个对话框:


其中选择none的时候会产生不带pdb文件的程序集.

总结:你可以使用web.config中的debug节的设置控制你要生成Debug版本还是Release版本 (前面这句话对web application不适用).但是你使用发布(publish)命令预编译web站点或者使用web站点部署工具情况除外.WSD会让你选择是生成Debug还是Release版本,然后预编译web站点,并且对应修改web.config的debug设置.

ASP.NET 2.0的编译行为相关推荐

  1. ASP.NET 2.0的编译模型

    ASP.NET 2.0支援两种编译模型(Compilation Model): 一为动态编译(Dynamic Compilation),另一个为先行编译(Precompilation). 这让程序设计 ...

  2. 艾伟:ASP.NET 2.0的编译模型

    ASP.NET 2.0支持两种编译模型(Compilation Model): 一为动态编译(Dynamic Compilation),另一个为先行编译(Precompilation). 这让程序设计 ...

  3. ASP.NET 2.0 页面编译方式

    转自MSDN The code-behind file contains a partial class that inherits from a base page class. The base ...

  4. ASP.NET 2.0 本地化功能:本地化 Web 应用程序的新方法

    适用于: Microsoft ASP.NET 2.0 Microsoft Visual Studio .NET Microsoft Visual Studio 2005 本地化 摘要:随着越来越多的公 ...

  5. ASP.NET 2.0 中的代码隐藏和编译

    ASP.NET 2.0 中的代码隐藏和编译      Fritz Onion 本页内容 代码隐藏 编译 程序集生成 小结 当我撰写本专栏的时候,Microsoft® .NET Framework 2. ...

  6. 在ASP.NET 2.0中使用样式、主题和皮肤

    ASP.NET 2.0的主题和皮肤特性使你能够把样式和布局信息存放到一组独立的文件中,总称为主题(Theme).接下来我们可以把这个主题应用到任何站点,用于改变该站点内的页面和控件的外观和感觉.通过改 ...

  7. Asp.net 1.0 升级至 ASP.NET 2.0十个问题总结

    1.Global.asax文件的处理形式不一样 转化后将出现错误,在vs2003中Global.asax具有代码后置文件,2.0下, 将代码分离文件移到 App_Code 目录下,以便使其自动变为可通 ...

  8. ASP.NET 2.0 X64的奇怪问题

    64位的CPU.64位的操作系统,终于等来了支持64位的ASP.NET 2.0,而让人失望的是依然不能让博客园网站运行于64位.      博客园网站目前运行于32位 ASP.NET 2.0,如果切换 ...

  9. ASP.NET 2.0的全球化与本地化之全球化

    一. 加入全球化信息 在我的网站中,在创建资源文件并加入一些本地化数据后,我首先开始使用显式本地化来设置控件(例如,在我的网站中的标签)的文本,以便它们可以从资源文件中得到它们的值.既然存在四种语言: ...

最新文章

  1. 太糟糕了,Java 8没有Iterable.stream()
  2. 【智能AI】准确率97%的开源肺炎检测模型
  3. 测试工程师不懂AI,还有未来吗?
  4. Understand源代码分析工具
  5. 怎么实现单点登录?面试必问!
  6. 实体与表映射关系XXX.hbm.xml配置详解(转)
  7. linux raw串口,linux下串口raw驱动(US100超声波)--Apple的学习笔记
  8. 【SICP练习】142 练习3.77
  9. Java 学习路线一条龙版
  10. 艾司博讯:拼多多店铺要不要一直上新?上新有用吗?
  11. [原创]淘宝天猫抢购软件“tbBuyer“
  12. Compiling for iOS 10.0, but module ‘xxx‘ has a minimum deployment target of iOS 12.0
  13. linux让grep带颜色,在linux下给grep命令添加颜色
  14. 关于android 百度地图离线包的调用问题
  15. 纯电小型领军者 奇瑞无界Pro
  16. html2canvas生成长图片时导致背景图渲染不全问题
  17. oracle静默创建实例linux,linux CentOS7下快速静默安装Oracle11GR2数据库并创建实例
  18. asp.net:如何取消设置的起始页
  19. 视频正在os x使用中_如何在OS X中使用家长控制来保护孩子
  20. JSP流浪动物收容与领养管理系统

热门文章

  1. oracle使用小技巧,Oracle使用技巧
  2. Redis基本数据类型、应用场景、操作指令
  3. 如何判断python是否安装成功_python怎么判断模块安装完成
  4. css阵列,CSS3简单的圆点阵列旋转加载动画
  5. oracle查询数据库的函数,Oracle:树查询及有关函数
  6. 目标检测(十)--SSD
  7. 应用程序委托协议栈发送消息
  8. Java EE设计思想
  9. git status命令
  10. kafka内置分区及自定义分区