Я еще не пробовал TeamCity, но настроил среду сборки для нашего нового проекта BizTalk.
Следуя превосходному совету Саид Ибрагим Хашими на мой собственный вопросперед запуском я создал набор сценариев MSBuild .proj и .targets.
Core
Центральный сценарий .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>
Сбор его вместе
.Proj, который вы на самом деле собираетесь выполнить с MSBuild, импортирует вашу конфигурацию, ваш проект (файлы исходного кода) и ядро (команды Pull, Build и Deployment)
<Project DefaultTargets="Deploy" xmlns="...">
<Import Project="Config.targets"/>
<Import Project="Project.targets"/>
<Import Project="Core.targets"/>
</Project>
Используя этот подход, я смогповторно использовать .targets contобъединение источников для создания около 50 моих проектов во многих различных комбинациях вместо создания VS-решений для их группировки.
Надеюсь, вы найдете это полезным - я могу добавить больше деталей, если вам интересно.