您可以通过一些非常简单的更改启用MSBuild BizTalk项目的增量编译。基本上,您需要覆盖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项目需要以某种方式在两遍中编译。第一遍编译模式,地图和管道,而第二遍编译编排。
您会注意到,被覆盖的目标非常类似于BizTalkCommon.targets file
中定义的原始目标。事实上,我做了两个简单的改动:
第一个变化涉及修改SecondPass
目标,并在Condition
属性增加一个额外的测试。如果你的项目甚至没有Orchestrations,这个测试是有用的,以防止发生第二遍。
不幸的是,如果您的项目包含业务流程,原始的SecondPass
目标删除中间程序集,然后继续编译业务流程。但是,如果所有文件都已更新,CompileODX
目标不需要运行。因此,第二次更改涉及将Delete
任务从SecondPass
目标移动到CompiledODX
目标。
这就是它的全部。
你用BizTalk 2010试过这个吗? – 2012-09-20 18:50:25
适用于BizTalk Server 2010.尽管如此,没有机会尝试使用BizTalk Server 2010 R2。 – 2012-09-20 20:47:05
试过了,确实有效。生产时间显着下降。谢谢! – 2012-09-20 21:01:07