一个使用MSBuild Task自动编译部署的例子

2024-01-15 06:08

本文主要是介绍一个使用MSBuild Task自动编译部署的例子,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

用户可以根据本地文件或者SVN目录中的最新资料来进行本地编译后将Release文件自动拷贝,Web目录自动拷贝后压缩,生成Zip文件来部署。这个方法的优点是操作简单,容易和其他工具并用。
Build.bat 内容:

@ECHO   OFF
SET   / P DeployConfig = Specify build target  ( 'Production' or 'Development' )
 
IF   / NOT  '%DeployConfig%' == 'Production'  (
            
IF   / NOT  '%DeployConfig%' == 'Development'  (
                        
ECHO  Please specify Production or Development .
                        
GOTO  finish
            
)
)
 
SET   / P VersionTag = Enter SVN revision  ( e . g .   1.2 . 4 ),  or 'trunk': 
 
echo .
 
msbuild project
. msbuild  / p :VersionTag = %VersionTag% ; DeployConfig = %DeployConfig%  / nologo
 
 
rem  IF %ERRORLEVEL% GTR 0 (
rem
      ECHO.
rem
      ECHO Build failed for revision number '%VersionTag%'
rem
      ECHO.
rem
 ) ELSE (
rem
 
rem
      echo Build succeeded for revision number '%VersionTag%'
rem
 )
 
 
:finish
 
project.msbuild内容:

< Project  xmlns ="http://schemas.microsoft.com/developer/msbuild/2003"  DefaultTargets ="DeploymentZip" >
            
< PropertyGroup >
                        
< DefaultConfiguration > Release </ DefaultConfiguration >
                        
< DefaultSvnServer > 192.168.0.2 </ DefaultSvnServer >
            
</ PropertyGroup >
            
            
<!-- Choose>
                        <When Condition="'$(VersionTag)' == 'trunk'">
                                    <PropertyGroup>
                                                <RepositoryPath>svn://$(DefaultSvnServer)/MYProject/trunk</RepositoryPath>
                                    </PropertyGroup>
                        </When>
                        <Otherwise>
                                    <PropertyGroup>
                                                <RepositoryPath>svn://$(DefaultSvnServer)/MYProject/tags/$(VersionTag)</RepositoryPath>
                                    </PropertyGroup>
                        </Otherwise>
            </Choose
-->
            
            
            
<!--  Retrieve project files from source control, of the specified revision  -->
            
<!-- Target Name="SvnExport">
                        <RemoveDir Directories="buildExport" />
                        <MakeDir Directories="buildExport" />
                        
                        <SvnExport 
                                    RepositoryPath="$(RepositoryPath)/web"
                                    LocalPath="buildExport/Web"
                                    Username="deploy"
                                    Password="readonly" />
                        
                        <SvnExport 
                                    RepositoryPath="$(RepositoryPath)/api"
                                    LocalPath="buildExportAPI"
                                    Username="deploy"
                                    Password="readonly" />
            </Target
-->
            
            
< ItemGroup >
      
< WebFiles  Include ="..Web***.*"  Exclude ="..Web**.svn**;..Web***.pdb" />  
   
</ ItemGroup >
 
            
<!--  Compile API  -->
            
<!-- Target Name="API" DependsOnTargets="SvnExport" -->
            
< Target  Name ="CompileAPI" >
                        
< MSBuild 
                                    
Projects ="..APIapi.csproj"
                                    StopOnFirstFailure
="true"
                                    Properties
="Configuration=$(DefaultConfiguration)"   />               
            
</ Target >
 
 
< Target  Name ="CopyEverything"  DependsOnTargets ="CompileAPI" >
           
< RemoveDir  Directories ="buildExport"   />
           
< MakeDir  Directories ="buildExport"   />
           
< MakeDir  Directories ="buildExportWeb"   />
           
< MakeDir  Directories ="buildExportAPI"   />
           
< Copy 
                                    
SourceFiles ="..APIin$(DefaultConfiguration)MYProject.dll"  
                                    DestinationFolder
="buildExportWebin"   />
                        
< Copy 
                                    
SourceFiles ="@(WebFiles)"  
                                    DestinationFiles
="@(WebFiles->'buildExportWeb%(RecursiveDir)%(Filename)%(Extension)')"   />
 
</ Target >
 
            
< Target  Name ="CopyWebConfig"  DependsOnTargets ="CopyEverything" >
                        
< Copy 
                                    
SourceFiles ="buildExportWebConfig$(DeployConfig)Web.config"
                                    DestinationFiles
="buildExportWebWeb.config"   />
                        
< RemoveDir  Directories ="buildExportWebConfig"   />
            
</ Target >
 
<!--  Zip up all the files for transporting to deploy  -->
            
< Target 
                        
Name ="DeploymentZip"  
                        DependsOnTargets
="CopyEverything;CopyWebConfig"
                        Condition
="('$(DeployConfig)' == 'QA' OR '$(DeployConfig)' == 'Production' OR '$(DeployConfig)' == 'Development') AND '$(VersionTag)' != ''"
                        
>
 
                        
< CreateItem 
                                    
Include ="buildExportWeb**;" >
                                    
< Output  TaskParameter ="Include"  ItemName ="WebAppFiles"   />
                        
</ CreateItem >
                        
                        
< Zip 
                                    
Files ="@(WebAppFiles)"  
                                    ZipFileName
="MYProject_$(DeployConfig)_$(VersionTag).zip"
                                    WorkingDirectory
="buildExportWeb"   />
 
                        
< Message  Text ="Built deployment file with $(DefaultConfiguration) for $(DeployConfig)."   />
                        
< Message  Text ="Deployment package: MYPROJECT_$(DeployConfig)_$(VersionTag).zip"   />
                        
< Message  Text ="Done."   />
                        
            
</ Target >
 
            
< UsingTask  TaskName ="MSBuild.Community.Tasks.Subversion.SvnExport"  AssemblyFile ="$(MSBuildExtensionsPath)MSBuildCommunityTasksMSBuild.Community.Tasks.dll"   />
            
< UsingTask  TaskName ="MSBuild.Community.Tasks.Zip"  AssemblyFile ="$(MSBuildExtensionsPath)MSBuildCommunityTasksMSBuild.Community.Tasks.dll"   />
</ Project >
这2个文件没有进行优化,根据不同项目有很大改动余地。但基本功能都经过测试。在XML模式下编辑可以方便看到很多地方我都注释了,也都通过测试。相信对大多用户有所帮助。
 

这篇关于一个使用MSBuild Task自动编译部署的例子的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/607907

相关文章

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

C#下Newtonsoft.Json的具体使用

《C#下Newtonsoft.Json的具体使用》Newtonsoft.Json是一个非常流行的C#JSON序列化和反序列化库,它可以方便地将C#对象转换为JSON格式,或者将JSON数据解析为C#对... 目录安装 Newtonsoft.json基本用法1. 序列化 C# 对象为 JSON2. 反序列化

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

RabbitMQ 延时队列插件安装与使用示例详解(基于 Delayed Message Plugin)

《RabbitMQ延时队列插件安装与使用示例详解(基于DelayedMessagePlugin)》本文详解RabbitMQ通过安装rabbitmq_delayed_message_exchan... 目录 一、什么是 RabbitMQ 延时队列? 二、安装前准备✅ RabbitMQ 环境要求 三、安装延时队

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

Python ORM神器之SQLAlchemy基本使用完全指南

《PythonORM神器之SQLAlchemy基本使用完全指南》SQLAlchemy是Python主流ORM框架,通过对象化方式简化数据库操作,支持多数据库,提供引擎、会话、模型等核心组件,实现事务... 目录一、什么是SQLAlchemy?二、安装SQLAlchemy三、核心概念1. Engine(引擎)

Java Stream 并行流简介、使用与注意事项小结

《JavaStream并行流简介、使用与注意事项小结》Java8并行流基于StreamAPI,利用多核CPU提升计算密集型任务效率,但需注意线程安全、顺序不确定及线程池管理,可通过自定义线程池与C... 目录1. 并行流简介​特点:​2. 并行流的简单使用​示例:并行流的基本使用​3. 配合自定义线程池​示

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

使用shardingsphere实现mysql数据库分片方式

《使用shardingsphere实现mysql数据库分片方式》本文介绍如何使用ShardingSphere-JDBC在SpringBoot中实现MySQL水平分库,涵盖分片策略、路由算法及零侵入配置... 目录一、ShardingSphere 简介1.1 对比1.2 核心概念1.3 Sharding-Sp

Java 正则表达式的使用实战案例

《Java正则表达式的使用实战案例》本文详细介绍了Java正则表达式的使用方法,涵盖语法细节、核心类方法、高级特性及实战案例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、正则表达式语法详解1. 基础字符匹配2. 字符类([]定义)3. 量词(控制匹配次数)4. 边