我还没有尝试过TeamCity,但我已经为我们的新BizTalk项目设置了构建环境。
在开始之前,我遵循了
Sayed Ibrahim Hashimi在
我的问题中给出的卓越建议,创建了一组MSBuild .proj和.targets脚本。
核心
一个中央的.targets脚本,用于执行您想要执行的实际构建步骤:
<Project DefaultTargets="Deploy" xmlns="...">
<!-- omitted validation steps, see referenced post for details -->
<PropertyGroup>
<PullDependsOn>
$(ValidateDependsOn);
Validate;
</PullDependsOn>
</PropertyGroup>
<PropertyGroup>
<BuildDependsOn>
$(PullDependsOn);
PullFromVersionControl;
</BuildDependsOn>
</PropertyGroup>
<PropertyGroup>
<DeployDependsOn>
$(BuildDependsOn);
Build;
</DeployDependsOn>
</PropertyGroup>
<Target Name="PullFromVersionControl" DependsOnTargets="$(PullDependsOn)">
<Exec Command="..." />
</Target>
<Target Name="Build" DependsOnTargets="$(BuildDependsOn)">
<MSBuild Projects="@(ProjectsToBuild)" />
</Target>
<Target Name="Deploy" DependsOnTargets="$(DeployDependsOn)">
<Exec Command="..." />
</Target>
</Project>
第二个核心部分是配置目标,就像您在.csproj文件中找到的那样。
<Project xmlns="...">
<PropertyGroup Condition=" '$(Environment)' == 'DEV' ">
<SomeConfigKey Condition=" '$(SomeConfigKey)' == '' ">Foo</SomeConfigKey>
</PropertyGroup>
<PropertyGroup Condition=" '$(Environment)' == 'TEST' ">
<SomeConfigKey Condition=" '$(SomeConfigKey)' == '' ">Bar</SomeConfigKey>
</PropertyGroup>
</Project>
项目
单个.csproj文件本身由一个.targets文件表示,其中只包含您构建所需的ItemGroups集合。
<Project xmlns="...">
<ItemGroup>
<!-- this group contains the list of items to pull from version control -->
<Sources Include="@(Sources)" />
<Sources Include="MyProjectRootDir" />
<Sources Include="MyDependentProjectRootDir" />
</ItemGroup>
<ItemGroup>
<ProjectsToBuild Include="@(ProjectsToBuild)" />
<ProjectsToBuild Include="MyProject.csproj" />
</ItemGroup>
</Project>
组合起来
你实际上要用MSBuild执行的.proj文件将导入你的配置、项目(源代码文件)和核心(拉取、构建和部署命令)。
<Project DefaultTargets="Deploy" xmlns="...">
<Import Project="Config.targets"/>
<Import Project="Project.targets"/>
<Import Project="Core.targets"/>
</Project>
使用这种方法,我能够重复使用包含源代码的 .targets 文件来构建50个不同组合的项目,而不是创建VS解决方案来对它们进行分组。
希望您会发现这个方法有用——如果您感兴趣,我可以添加更多细节。
<msbuild>
任务。从主脚本中分叉msbuild。我的主要需求是避免在构建脚本中重复解决方案/proj配置,但仍然能够添加预/后构建自定义任务。 - Gishu