Вы можете включить пошаговую компиляцию проекта MSBuild BizTalk с помощью пары очень простых изменений.По сути, вам необходимо переопределить две цели, которые определены в файле BizTalkCommon.targets
.
Эти цели могут быть переопределены в ваших собственных файлах .btproj и не требуют изменения исходного файла .targets, поставляемого с BizTalk.
How To
Сначала создайте собственный файл .targets для размещения ваших настроек, например BizTalkCustom.targets
:
<Import Project="$(MSBuildExtensionsPath)\Microsoft\BizTalk\BizTalkC.targets" />
<!-- Rerun the build process (second pass) -->
<Target Name="SecondPass" Condition="$(SecondBuild)!=true and $(TempAssemblyOnly)!=true and @(XLang)!=''">
<MSBuild Projects="$(MSBuildProjectFile)" Properties="SecondBuild=true" />
</Target>
<!-- Compile XLang/s orchestration -->
<Target
Name="CompileODX"
Condition="$(SecondBuild)==true"
Inputs="@(XLang);$(MSBuildAllProjects);$(ClrTypesAssembly)"
Outputs="$(BuildDone)">
<!-- Delete previously generated C# files from XLang compilation -->
<Delete Files="@(IntermediateAssembly)" />
<Delete Files="@(CSharpOutputFromXLang)" />
<XLangTask XLangItems="@(XLang)"
ProjectReferences="@(ReferencePath)"
WarningLevel="$(WarningLevel)"
BpelCompliance="$(BpelCompliance)"
DefineConstants="$(DefineConstants)"
TreatWarningsAsErrors="$(TreatWarningsAsErrors)"
TempAssembly="$(ClrTypesAssembly)"
OutputDirectory="$(XLangOutputPath)">
</XLangTask>
</Target>
Затем заменитепоследний оператор Import
в вашем файле .btproj:
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="$(MyCustomExtensions)\BizTalkCustom.targets" />
Как это работает
Проекты BizTalk Server необходимо каким-то образом компилировать в два этапа.Первый проход компилирует схемы, карты и конвейеры, тогда как второй проход компилирует оркестровки.
Вы заметите, что переопределенные цели очень очень похожи на исходные цели, определенные в BizTalkCommon.targets file
.На самом деле я сделал два простых изменения:
Первое изменение включает изменение цели SecondPass
и добавление дополнительного теста в атрибут Condition
.Этот тест полезен для предотвращения повторного прохождения, если ваш проект даже не имеет оркестровок.
К сожалению, если ваш проект содержит оркестровки, исходная цель SecondPass
удаляет промежуточные сборкиа затем приступить к составлению оркестровок.Тем не менее, цель CompileODX
не должна запускаться, если все файлы уже обновлены.Следовательно, второе изменение включает перемещение задачи Delete
из цели SecondPass
в цель CompiledODX
.
Это все, что нужно сделать.