一个使用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

相关文章

如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件

《如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件》本文介绍了如何使用Docker部署FTP服务器和Nginx,并通过HTTP访问FTP中的文件,通过将FTP数据目录挂载到N... 目录docker部署FTP和Nginx并通过HTTP访问FTP里的文件1. 部署 FTP 服务器 (

MySQL 日期时间格式化函数 DATE_FORMAT() 的使用示例详解

《MySQL日期时间格式化函数DATE_FORMAT()的使用示例详解》`DATE_FORMAT()`是MySQL中用于格式化日期时间的函数,本文详细介绍了其语法、格式化字符串的含义以及常见日期... 目录一、DATE_FORMAT()语法二、格式化字符串详解三、常见日期时间格式组合四、业务场景五、总结一、

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

Python中配置文件的全面解析与使用

《Python中配置文件的全面解析与使用》在Python开发中,配置文件扮演着举足轻重的角色,它们允许开发者在不修改代码的情况下调整应用程序的行为,下面我们就来看看常见Python配置文件格式的使用吧... 目录一、INI配置文件二、YAML配置文件三、jsON配置文件四、TOML配置文件五、XML配置文件

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

Ubuntu 22.04 服务器安装部署(nginx+postgresql)

《Ubuntu22.04服务器安装部署(nginx+postgresql)》Ubuntu22.04LTS是迄今为止最好的Ubuntu版本之一,很多linux的应用服务器都是选择的这个版本... 目录是什么让 Ubuntu 22.04 LTS 变得安全?更新了安全包linux 内核改进一、部署环境二、安装系统

MySQL InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据

《MySQLInnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据》mysql的ibdata文件被误删、被恶意修改,没有从库和备份数据的情况下的数据恢复,不能保证数据库所有表数据... 参考:mysql Innodb表空间卸载、迁移、装载的使用方法注意!此方法只适用于innodb_fi

JAVA集成本地部署的DeepSeek的图文教程

《JAVA集成本地部署的DeepSeek的图文教程》本文主要介绍了JAVA集成本地部署的DeepSeek的图文教程,包含配置环境变量及下载DeepSeek-R1模型并启动,具有一定的参考价值,感兴趣的... 目录一、下载部署DeepSeek1.下载ollama2.下载DeepSeek-R1模型并启动 二、J

Python中conda虚拟环境创建及使用小结

《Python中conda虚拟环境创建及使用小结》本文主要介绍了Python中conda虚拟环境创建及使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录0.前言1.Miniconda安装2.conda本地基本操作3.创建conda虚拟环境4.激活c

Spring中@Lazy注解的使用技巧与实例解析

《Spring中@Lazy注解的使用技巧与实例解析》@Lazy注解在Spring框架中用于延迟Bean的初始化,优化应用启动性能,它不仅适用于@Bean和@Component,还可以用于注入点,通过将... 目录一、@Lazy注解的作用(一)延迟Bean的初始化(二)与@Autowired结合使用二、实例解