一个使用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模式下编辑可以方便看到很多地方我都注释了,也都通过测试。相信对大多用户有所帮助。
原文地址:https://www.cnblogs.com/younggun/p/1762242.html