为ASP.NET 2.0网站生成唯一程序集
作者:veryhappy(wx.net)
在Visual Studio 2003下开发网站的都知道ASP.NET 1.1网站生成后都是一个唯一命名的程序集(项目名称.DLL),但是这种情况在Visual Studio 2005的网站开发中不见了。Visual Studio 2005给我们提供了“发布网站”这样方便的功能,不用在像以前一样COPY的部署,但是采用其“发布网站”的功能,会在站点的BIN目录中产生App_Code.compiled,App_Code.dll,App_Web_xxxxxx.dll,项目名称.dll等等这样的程序集,如果不采用预编译的方式那么产生的文件会更加的多,因为很多都是随机命名也没有什么规律可言;这样会给那些想COPY更新的人带来不便,因为原来的文件不能被覆盖,需要先删除再COPY;有很多时候可能就是更新了后台代码,直接生成项目或是WEB的程序集,像以前一样直接覆盖DLL的方式也很简单。
也许很多人不会考虑BIN下存放的东西,只要站点能运行就好了,那么这样的人读到这里也就没有必要再看此文章,要知道时间是宝贵的,浪费在自己不关心的事情上很不值得的。
上面罗嗦了一堆,下面笔者将介绍采用Microsoft Web Deployment Projects在Visual Studio 2005中生成唯一程序集的方法。
关于Microsoft Web Deployment Projects工具可以从微软站点获得详尽的资料,我也没什么好说的了微软写的很清楚了,呵呵。
下载地址:
http://msdn.microsoft.com/asp.net/reference/infrastructure/wdp/default.aspx
详细使用:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/web_deployment_projects.asp
安装后在“生成”和WEB项目的上下文菜单看到“Add Web Deployment Project…”,好了添加一个Web Deployment Project项目,起一个名称,这个名称就是将来编译后生成的程序集名称,默认的名称“当前项目名称_deploy”
<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 174pt; HEIGHT: 174.75pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:%5CDOCUME~1%5CADMINI~1.KOS%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.png"></imagedata></shape>
双击Web Deployment Project的项目出现属性页面
<shape id="_x0000_i1026" style="WIDTH: 415.5pt; HEIGHT: 258pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:%5CDOCUME~1%5CADMINI~1.KOS%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image003.png"><font size="3"></font></imagedata></shape>
Compilation中的Output Folder设置项目输出路径
Output Assemblies中的四大选项:
<shape id="_x0000_i1027" style="WIDTH: 415.5pt; HEIGHT: 255pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:%5CDOCUME~1%5CADMINI~1.KOS%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image005.png"><font size="3"></font></imagedata></shape>
n Merge all outputs to a single assembly-所有输出都编译成一个程序集(参数:程序集名称)
n Treat as library component (remove the App_Code.compiled file)-App_Code视为类库(删除App_Code.compiled文件)
n Merge each individual folder output to its own assembly-WEB项目中单独的目录会编译到一个程序集中(参数:程序集前缀)
n Merge all pages and control outputs to a single assembly-所有页面控件编译到一个程序集中(参数:程序集名称)
n Create a separate assembly for each page and control output-为每一个页面和控件创建程序集
Signing使用key文件建立强命名空间的程序集
Deployment
<shape id="_x0000_i1028" style="WIDTH: 415.5pt; HEIGHT: 255.75pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:%5CDOCUME~1%5CADMINI~1.KOS%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image007.png"><font face="Times New Roman" size="3"></font></imagedata></shape>
n Enable Web.config file section replacement-用不同的config文件替换Web.config中的节点
n Create an IIS virtual directory for the output folder-创建IIS虚拟目录(参数:虚拟目录名称)
n Remove the App_Data folder from output location-删除输出目录中的App_Data目录
好了通过简单的设置,就可以生成一个看上去非常“干净利落”的bin目录,每个程序集都很明显,对部分升级工作很有帮助。
2006-6
实际上在我们的一个实际ASP.NET 2.0的解决方案中来应用这种方式出现了问题,下面我就讲一下我的解决过程希望对大家有所帮助。
我们的解决方案包括22个项目(主要是类库),其中的一个WEB项目是负责用户UI的,传统的生成或是发布网站的方式没有任何问题,当使用Web Deployment Projects工具生成唯一程序集时出现了错误信息“Aspnet_merge.exe Exited with Code <chmetcnv unitname="”" sourcevalue="1" hasspace="False" negative="False" numbertype="1" tcsc="0" w:st="on"><font face="Times New Roman">1</font><span lang="EN-US" style="COLOR: windowtext; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><span lang="EN-US">”</span></span></chmetcnv>(Aspnet_merge.exe 退出,错误代码1),这样的信息根本无法让我们办断到底是哪里出了问题。好,下面依次打开VS 2005的工具-选项-项目和解决方案-生成并运行,设置“MSBuild 项目生成输出详细信息”,选择“详细”。再次生成Web Deployment Projects项目,注意“输出”框内的信息现在变得非常丰富了,最后导致无法编译的问题终于出来了“An error occurred when merging assemblies: ILMerge.Merge: ERROR!!: Duplicate type ‘_Default’ found in assembly 'App_Web_k5hhsnh0'”,它的意思是说在程序集中发现了相同的类型_Default,经过我检查确实在我们的WEB项目中存在了两个_Default类(在不同的目录中),这样的问题通过一般的生成完成和发布网站肯定都是检测不出来的,运行也是正常的。VS 2005的WEB项目默认的把命名空间给去掉了,可以手动增加一个命名空间,cs代码中加入namespace的语句块,另外别忘了在aspx文件的<@page>的Inherits中写入对应的[namespace].[类名];经过这样的操作再次编译成一个程序集就没有问题了(备注:这个项目前后一共发现了5对类名称一致的情况,加上命名空间或是改名称就可以解决了)。
上面就是结合我的项目实际解决的问题,暂时还没有发现别的错误出来。使用有问题的朋友也多多交流。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=763919
相关推荐
ASP.NET 2.0是微软.NET Framework 2.0的一部分,是一个用于构建动态网站、Web应用程序和Web服务的强大工具。SQL Server 2005则是微软推出的企业级数据库管理系统,提供了数据存储、分析和报表生成等功能。 首先,...
ASP.NET 2.0 是微软.NET Framework的一部分,它提供了一种用于构建动态网站、Web应用程序和Web服务的强大工具。ASP.NET 2.0引入了许多改进和新特性,如页面生命周期管理、母版页(Master Pages)机制、内置状态管理...
而在ASP.NET 2.0中,默认情况下会即时创建多个程序集,每个ASPX页面(包括内容页面、代码分离页面和隐藏的设计器页面)都会被编译到单独的程序集中。 #### 转换应用程序 - **运行转换向导** Visual Studio 2005...
ASP.NET 2.0是微软推出的用于构建动态网站、Web应用程序和Web服务的框架,它建立在.NET Framework 2.0之上,提供了丰富的功能和工具,使得开发者能够更高效地构建交互性强、性能优良的Web应用。本入门精通PDF全集...
ASP.NET 2.0是微软.NET Framework的一个关键组成部分,它提供了一种强大的工具集,用于构建动态、数据驱动的Web应用程序。这个版本引入了许多新特性,如控件生命周期改进、母版页(Master Pages)和皮肤(Skin)功能...
ASP.NET 2.0 是微软推出的用于构建动态网站和web应用程序的框架,它基于.NET Framework 2.0。本教程主要关注的是使用C#语言进行ASP.NET开发的基础知识。 首先,ASP.NET页面的扩展名是.aspx,这表明该文件是一个ASP...
ASP.NET 2.0是微软公司推出的一种基于.NET Framework的Web应用程序开发框架,它极大地简化了Web应用的构建过程,并提供了丰富的功能集。本电子书《ASP.NET 2.0网络开发技术》深入探讨了这一技术的核心概念和实践应用...
ASP.NET 2.0 是微软推出的用于构建动态网站和Web应用程序的框架,它基于.NET Framework。这个基础教程针对的是初学者,旨在帮助他们掌握使用ASP.NET 2.0进行电子商务类网站开发的基本技能。 首先,ASP.NET 2.0 页面...
ASP.NET 2.0 是微软开发的一个用于构建Web应用程序的框架,它在.NET Framework 2.0的基础上提供了更丰富的功能和更高的开发效率。这个“ASP.NET 2.0 数据库项目案例导航”很可能是针对使用ASP.NET 2.0进行数据库交互...
ASP.NET 2.0 是微软推出的Web应用程序开发框架,它为开发者提供了强大的工具和功能,使得构建动态网站、Web应用程序和服务变得更加便捷。本教程重点聚焦于ASP.NET 2.0中的数据绑定高级技巧,这对于创建数据驱动的...
ASP.NET 2.0是微软开发的一个用于构建Web应用程序的框架,它在.NET Framework 2.0的基础上构建,为开发者提供了强大的工具集和丰富的功能,极大地简化了Web应用的开发流程。这本书《ASP.NET 2.0编程珠玑--来自MVP的...
8. ** Membership 和 Role Provider**:ASP.NET 2.0引入了会员和角色提供程序,为网站的用户管理和权限控制提供了标准接口,简化了安全性的实现。 9. **状态管理**:改善了视图状态(ViewState)和控件状态...
- **编译改进**:当请求一个具有新代码隐藏文件的 ASPX 页面时,ASP.NET 2.0 运行时会将 ASPX 页面和局部类合并为一个类。这种方式简化了编译过程,提高了代码的一致性和稳定性。 #### ASP.NET 2.0 代码模型详解 -...
这个压缩包文件"ASP.NET 2.0+ SQL Server.rar"很可能包含了关于如何使用这两者结合进行Web应用程序开发的相关资源。 ASP.NET 2.0是微软.NET框架下的一个组件,用于构建动态网站、Web应用和Web服务。它提供了丰富的...
ASP.NET 2.0是微软公司推出的一种基于.NET Framework的Web应用程序开发框架,它极大地简化了Web应用的构建过程,并提供了丰富的功能集。本教程PPT聚焦于ASP.NET 2.0动态网站的开发,旨在帮助开发者掌握这一核心技术...
ASP.NET 2.0是微软开发的一个用于构建动态网站、Web应用程序和服务的框架。Web2.0则代表了互联网的第二次浪潮,强调用户交互、内容共创和社区建设。本电子教程详细介绍了如何利用ASP.NET 2.0的技术特性来实现Web2.0...
ASP.NET 2.0 是微软推出的用于构建动态网站和Web应用程序的框架,它极大地简化了Web开发过程。在这个快速入门教程的第七部分中,我们将深入探讨ASP.NET 2.0中的数据绑定基本技巧,这对于任何想要高效处理网页数据...
**ASP.NET 2.0** 的发布标志着Web应用程序开发的一大进步,它引入了大量的新功能,使得开发更加高效、便捷。与传统的ASP相比,ASP.NET 2.0采用了编译语言进行页面构建,而非传统的解释性语言。这种变化不仅提高了...