2013-03-13 73 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>