我多次使用msbuild命令行为我的dev / test / production网站创建部署zip文件。我已经为每个配置了参数和配置xml。我想知道我是否可以将我对msbuild的3个调用浓缩为1,并让它同时构建所有三个?
现在我必须运行
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而苦苦挣扎。我正在努力简化事情。
答案 0 :(得分:1)
我有一个模板用于并行构建同一解决方案的所有skus。
这与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>
答案 1 :(得分: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
一次,其属性如图所示)