いくつかの非常に簡単な変更を行うだけで、MSBuild BizTalk プロジェクトのインクリメンタル コンパイルを有効にすることができます。基本的に、ファイルで定義されている 2 つのターゲットをオーバーライドする必要がありBizTalkCommon.targets
ます。
これらのターゲットは、独自の .btproj ファイルでオーバーライドでき、BizTalk に同梱されている元の .targets ファイルを変更する必要はありません。
方法
まず、独自の .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>
次に、.btproj ファイルの最後のImport
ステートメントを置き換えます。
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="$(MyCustomExtensions)\BizTalkCustom.targets" />
それはどのように機能しますか
BizTalk Server プロジェクトは、何らかの形で 2 つのパスでコンパイルする必要があります。最初のパスはスキーマ、マップ、およびパイプラインをコンパイルし、2 番目のパスはオーケストレーションをコンパイルします。
オーバーライドされたターゲットは、BizTalkCommon.targets file
. 実際、私は 2 つの簡単な変更を加えました。
最初の変更には、SecondPass
Target の変更と属性へのテストの追加が含まれCondition
ます。このテストは、プロジェクトにオーケストレーションさえない場合に、2 番目のパスが発生するのを防ぐのに役立ちます。
残念ながら、プロジェクトにオーケストレーションが含まれている場合、元のSecondPass
ターゲットは中間アセンブリを削除してから、オーケストレーションのコンパイルに進みます。ただし、CompileODX
すべてのファイルがすでに最新の状態である場合、ターゲットを実行する必要はありません。したがって、2 番目の変更には、Delete
タスクをSecondPass
ターゲットからターゲットに移動することが含まれCompiledODX
ます。
それだけです。