技术开发 频道

ASP.NET 2.0的编译行为分析

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)中添加了ReleaseDebug的配置.但是这并不意味着Visual Studio知道如何编译web站点.而是,Visual Studio知道如何使用WSD提供的MSBuild文件构建Debug或者Release版本.你现在可以在配置管理器中选择Debug或者Release.这种请求最终还是要交给aspnet_complier执行的,发布命令也是这样的.

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

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


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

 

0
相关文章