Sun_Blue_Sky

菩提本无树,明镜亦非台,本来无一物,何处惹尘埃 寻求内心的平静
随笔 - 21, 文章 - 92, 评论 - 75, 阅读 - 10万
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

使用MSBuild自动编译发布你的ASP.NET应用程序

Posted on   Sun_Blue_Sky  阅读(1283)  评论(0编辑  收藏  举报

此文介绍如何使用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:

 

其中  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有兴趣, 或有什么疑问, 可以通过mailto:PeterLeePersonal@gmail.com 与我联系.

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示