2013-03-13 1 views
0

빌드 도중 또는 사전 빌드 도중이나 빌드 후 도중에 MSbuild를 호출 할 수 있습니까? 솔루션에서 두 가지 웹 프로젝트를 게시하려고합니다. 나는 파일 시스템 퍼블리싱을 사용하고있다. 여기에 요구되는 것은 빌딩 솔루션이 두 웹 프로젝트를 퍼블리시해야한다는 것이다. 누구든 제발 제안 할 수 있니?MSbuild Publish 호출

답변

0

포스트 빌드 이벤트에 너무 많은 배포 논리를 적용하지 않을 것입니다. 그것은 "허약하다".

.csproj 파일을 너무 많이 사용하는 대신 별도의 .msbuild 파일을 만들고 "추가"논리를 사용하십시오.

아래는 기본적인 예입니다. xml을 파일 호출 "MyBuildAndDeploy.msbuild"에두고 .sln (또는 .csproj) 파일과 동일한 폴더에 넣은 다음 명령 줄에서 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>