首页 > 代码库 > 使用MSBuild自动编译发布你的ASP.NET应用程序
使用MSBuild自动编译发布你的ASP.NET应用程序
此文介绍如何使用MSBuild自动编译并发布你的ASP.NET应用程序. 比较适合每日编译.通常我们都使用IDE(Visual Studio)编译并发布ASP.NET程序, 需要手动操作, 如果步骤繁琐会很容易出错. 同样的工作可由MSBuild自动完成, MSBuild是一个Visual Studio编译工具, 随.NET Framework提供, 一般可在 %SystemDrive% \WINDOWS\Microsoft.NET\Framework\v3.5 找到.有关MSBuild的详细介绍请看MSDN: MSBuild Overview下面我们用一个例子来介绍一下MSBuild是如何做到这些的. 请从这里下载示例: MSBuildDemo解压示例文件到一个新的目录, 其中MSBuildDemo.sln是一个样板项目, 这个样板项目包括一个Class Library工程Ref, 一个Web Application工程WebApp和一个网站WebSite.而DailyBuild\DailyBuild.sln是我们为MSBuild创建的, 它包含了MSBuild编译和发布的配置信息, 包括编译方案(Release), 网站发布设置等.现在试一下, 双击DailyBuild\DailyBuild.bat, 看能否自动编译并发布WebApp到WebAppPublished, 编译并发布WebSite到WebSitePublished目录中? DailyBuild.bat中, 主要命令是: C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe DailyBuild.xml /t:Main @DailyBuild.rsp其中DailyBuild.xml存储了一系列MSBuild的任务(有关MSBuild任务的相关信息, 请参考MSDN: MSBuild Task Reference), MSBuild就是通过执行一系列的任务来编译和发布你的程序的./t:Main 指定了MSBuild的入口点, 它说明了MSBuild应该从哪里开始(后面还会提到).@DailyBuild.rsp为MSBuild指定了响应文件(为了避免重复输入相同的命令开关, 将这些开关每个一行放入响应文件中代替).主要的部分就是DailyBuild.xml: 1<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 2 <PropertyGroup> 3 <SolutionRoot>..</SolutionRoot> 4 <WebAppOutput>..\WebAppPublished</WebAppOutput> 5 <WebSiteOutput>..\WebSitePublished</WebSiteOutput> 6 </PropertyGroup> 7 8 <Target Name="GetLatest"> 9 <PropertyGroup>10 <TFServer>$/PO</TFServer>11 <WorkspacePath>D:\WorkCopies\PO\src\trunk</WorkspacePath>12 <TFCommand>D:\Programs\VS9\Common7\IDE\tf.exe</TFCommand>13 </PropertyGroup>1415 <Exec16 Command="$(TFCommand) history $(TFServer) /version:T /noprompt /recursive /stopafter:1 /format:detailed 1>DailyBuild\MSBuild\LatestChangeset.txt"17 WorkingDirectory="$(SolutionRoot)"18 ContinueOnError="true" />1920 <Exec21 Command="$(TFCommand) get"22 WorkingDirectory="$(WorkspacePath)"23 ContinueOnError="true" />24 25 </Target>2627 <Target Name="Build">28 <RemoveDir Directories="$(WebAppOutput)" ContinueOnError="false" />29 <MakeDir Directories="$(WebAppOutput)" ContinueOnError="false" />30 <RemoveDir Directories="$(WebSiteOutput)" ContinueOnError="false" />31 <MakeDir Directories="$(WebSiteOutput)" ContinueOnError="false" />3233 <MSBuild34 Projects="$(SolutionRoot)\DailyBuild\DailyBuild.sln"35 ContinueOnError="false"36 Targets="Rebuild"37 Properties="Configuration=Release">38 </MSBuild>39 </Target>4041 <Target Name="CleanupAfterBuild" DependsOnTargets="Build">42 <Delete Files="$(WebAppOutput)\bin\*.pdb" ContinueOnError="true" />43 <Delete44 Condition="Exists(‘$(WebAppOutput)\BFL.MSBuildDemo.WebApp.csproj‘)"45 Files="$(WebAppOutput)\BFL.MSBuildDemo.WebApp.csproj"46 ContinueOnError ="true" />47 <Delete48 Condition="Exists(‘$(WebAppOutput)\BFL.MSBuildDemo.WebApp.csproj.user‘)"49 Files="$(WebAppOutput)\BFL.MSBuildDemo.WebApp.csproj.user"50 ContinueOnError ="true" />51 <Delete52 Condition="Exists(‘$(WebAppOutput)\BFL.MSBuildDemo.WebApp.Publish.xml‘)"53 Files="$(WebAppOutput)\BFL.MSBuildDemo.WebApp.Publish.xml"54 ContinueOnError ="true" />55 <RemoveDir56 Condition="Exists(‘$(WebAppOutput)\obj‘)"57 Directories="$(WebAppOutput)\obj"58 ContinueOnError ="true" />5960 <Delete Files="$(WebSiteOutput)\bin\*.pdb" ContinueOnError="true" />61 </Target>6263 <Target Name="Main">64 <CallTarget Targets="GetLatest" ContinueOnError="false" />65 <CallTarget Targets="CleanupAfterBuild" />66 </Target>67</Project>其中 PropertyGroup 定义了一些全局变量, 你可以在这个文件中以$(变量名)的方式使用它. Target 相当于函数或方法, 我们在上面的命令中为MSBuild定义的入口点/t:Main就是一个Target.Target由一组CallTarget或MSBuild任务组成, 可以为Target元素定义DependsOnTargets属性, 以确保在执行当前Target 前先调用DependsOnTargets指定的Target.由 DailyBuild.xml的Target名称可以看出, 示例中我们首先执行的是GetLatest, 它确保在编译之前先获取最新版本的代码. 我们通过在GetLatest中执行两个Exec任务做到这点.这里我使用了TFS(Team Foundation Server), 你完全可以根据你的实际情况替换成等价的VSS, CVS或SVN命令.接下来执行的是Build, 我们调用MSBuild任务来编译DailyBuild.sln解决方案, 并根据解决方案中的设置, 发布WebApp和WebSite. 最后, 根据多次自动编译的经验, 我添加了CleanupAfterBuild, 以删除不必要的文件.另外, 你可以参考这个链接MSBuild Community Tasks, 给MSBuild添加更多种任务.
使用MSBuild自动编译发布你的ASP.NET应用程序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。