2013-03-13 90 views
0

是否有可能在构建期间或在buildevent或buildevent之后调用MSbuild发布?我试图从解决方案中发布两个Web项目。我正在使用文件系统发布。这里的要求是,构建解决方案应负责发布这两个Web项目。任何人都可以请建议吗?调用MSbuild发布

回答

0

我不会在构建后事件中放置太多的部署逻辑。它变得“脆弱”。

创建一个单独的.msbuild文件,并在其中执行“额外”逻辑,而不是使用.csproj文件搞得太多。

下面是一个基本的例子。 将下面的xml放在一个文件调用“MyBuildAndDeploy.msbuild”中,将它放在与.sln(或.c​​sproj)文件相同的文件夹中,然后使用命令行中的msbuild.exe“MyBuildAndDeploy.msbuild”执行 。

下面是构建主要解决方案然后将文件复制到某处的基本示例。

<?xml version="1.0" encoding="utf-8"?> 
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="AllTargetsWrapper"> 


    <PropertyGroup> 
     <!-- Always declare some kind of "base directory" and then work off of that in the majority of cases --> 
     <WorkingCheckout>.</WorkingCheckout> 
     <BuildResultsRootFolder>$(WorkingCheckout)\..\BuildResults</BuildResultsRootFolder> 
    </PropertyGroup> 



    <Target Name="AllTargetsWrapper"> 

     <CallTarget Targets="BuildSolution" /> 
     <CallTarget Targets="CopyBuildOutputFiles" /> 

    </Target> 


    <Target Name="BuildSolution"> 

     <MSBuild Projects="$(WorkingCheckout)\MySuperCoolSolution.sln" Targets="Build" Properties="Configuration=$(Configuration)"> 
      <Output TaskParameter="TargetOutputs" ItemName="TargetOutputsItemName"/> 
     </MSBuild> 
     <Message Text="BuildSolution completed" /> 

    </Target> 


    <Target Name="CopyBuildOutputFiles"> 


     <MakeDir Directories="$(BuildResultsRootFolder)\$(Configuration)" Condition="!Exists('$(BuildResultsRootFolder)\$(Configuration)\')"/> 

     <ItemGroup> 
      <BuildOutputFilesExcludeFiles Include="$(WorkingCheckout)\**\*.doesnotexist" /> 
      <BuildOutputFilesIncludeFiles Include="$(WorkingCheckout)\**\*.dll" Exclude="@(BuildOutputFilesExcludeFiles)" />  
      <BuildOutputFilesIncludeFiles Include="$(WorkingCheckout)\**\*.exe" Exclude="@(BuildOutputFilesExcludeFiles)" />  
      <BuildOutputFilesIncludeFiles Include="$(WorkingCheckout)\**\*.config" Exclude="@(BuildOutputFilesExcludeFiles)" /> 
      <BuildOutputFilesIncludeFiles Include="$(WorkingCheckout)\**\*.pdb" Exclude="@(BuildOutputFilesExcludeFiles)" /> 
     </ItemGroup> 

     <Copy SourceFiles="@(BuildOutputFilesIncludeFiles)" 
      DestinationFolder="$(BuildResultsRootFolder)\$(Configuration)\"/> 

    </Target> 


</Project>