2014-01-29 71 views
1

我多次使用msbuild命令行爲我的開發/測試/生產網站創建部署zip文件。我已經爲每個配置了參數和配置xml。我想知道是否可以將我的3個調用壓縮到一個msbuild,並讓它一次構建所有三個?有沒有辦法在單個構建中使用msbuild創建多個部署?

現在我要跑

msbuild.exe myproject.sln /T:Build /p:DeployOnBuild=True /p:PublishProfile="Dev Server" 
msbuild.exe myproject.sln /T:Build /p:DeployOnBuild=True /p:PublishProfile="Prod Server" 

我使用(竹)持續部署的解決方案與此多個呼叫的MSBuild出於某種原因掙扎(我有一個開放售票而且他們也很困惑)。我試圖簡化一些事情。

回答

1

我有用於構建出並聯的相同溶液的所有SKU的模板。

這與Stijn使用ItemGroup作爲項目定義而非特定屬性的一系列選項相同的概念+ msbuild任務將同時構建兩個,節省您的時間並冒泡任何配置問題時平行建設。

<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <ItemGroup> 
    <SolutionToBuild Include="$(MSBuildThisFileDirectory)\MyProject.sln"> 
     <Properties>DeployOnBuild=True;PublishProfile="Dev Server"</Properties> 
    </SolutionToBuild> 
    <SolutionToBuild Include="$(MSBuildThisFileDirectory)\MyProject.sln"> 
     <Properties>DeployOnBuild=True;PublishProfile="Prod Server"</Properties> 
    </SolutionToBuild> 
    </ItemGroup> 
    <Target Name="Build"> 
    <MsBuild BuildInParallel="true" ContinueOnError="true" Projects="@(SolutionToBuild)" /> 
    </Target> 
    <Target Name="Clean"> 
    <MsBuild BuildInParallel="true" ContinueOnError="true" Projects="@(SolutionToBuild)" Targets="Clean" /> 
    </Target> 
</Project> 
0

您只能在命令行上調用多個不同的目標,但不能爲屬性提供多個不同的值。至少不是我意識到的方式。然而,解決方法很簡單,比命令行更容易擴展,以及典型的msbuild方式:創建一個如下所示的主構建文件,並從Bamboo中調用它,而不是解決方案。

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" 
     xmlns="http://schemas.microsoft.com/developer/msbuild/2003" 
     DefaultTargets=Build> 
    <Target Name="Build"> 
    <ItemGroup> 
     <PublishProfiles Include="Dev Server"/> 
     <PublishProfiles Include="Prod Server"/> 
    </ItemGroup> 
    <MsBuild Projects="myproject.sln" Targets="Build" 
      Properties="DeployOnBuild=True;PublishProfile=%(PublishProfile.Identity)"/> 
    </Target> 
</Project> 

(如圖所示,這將調用MsBuild myproject.sln一旦在PublishProfiles列表與所述屬性的每個項目)

相關問題