Biztalk 2009和2010 .btproj项目中的增量构建支持?

| 在追求增量构建时间改进的同时,我发现.btproj文件以及所有其他依赖于这些文件的项目都是在每个增量构建上重建的(部分)。一直跟踪到BizTalkCommon.targets,我发现它对程序集进行了2遍编译-但只有第一遍会考虑已构建的工件,从而破坏了依赖链的增量部分。可以在BizTalkCommon.targets(第228行)中看到有问题的目标:
<!-- Delete the assembly and rerun the build process -->
<Target Name=\"SecondPass\"
        Condition=\"$(SecondBuild)!=true and $(TempAssemblyOnly)!=true\">

    <Delete Files=\"@(IntermediateAssembly)\" />
    <MSBuild Projects=\"$(MSBuildProjectFile)\" Properties=\"SecondBuild=true\"/>
</Target>
我意识到有2遍构建的原因,但根本无法相信不可能为目标指定适当的输入和输出以正确处理增量构建。 有谁知道.targets文件是否有补丁,或者是否有不支持增量构建的另一个充分理由?     
已邀请:
您可以通过一些非常简单的更改来启用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文件中的最后一个“ 4”语句:
  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />
  <Import Project=\"$(MyCustomExtensions)\\BizTalkCustom.targets\" />
它如何运作 BizTalk Server项目需要以某种方式在两次通过中进行编译。第一遍编译架构,映射和管道,而第二遍编译编排。 您会注意到,覆盖的目标与在ѭ6中定义的原始目标非常相似。实际上,我做了两个简单的更改: 第一个更改涉及修改“ 7”目标并在“ 8”属性中添加额外的测试。如果您的项目甚至没有编排,此测试对于防止第二次通过也很有用。 不幸的是,如果您的项目包含编排,原始的“ 7”目标将删除中间程序集,然后继续编译编排。但是,如果所有文件都是最新的,则无需运行“ 10”目标。因此,第二个更改涉及将“ 11”任务从“ 7”目标移动到“ 13”目标。 这里的所有都是它的。     
这是我的团队遇到的一件事,只是简单地放弃了自定义构建文件,而是使用位于此处的BizTalk部署框架。从VS级别开始,BizTalk会做很多“有趣”的事情,因为2009年是BizTalk的第一个版本,没有使用外部构建过程。但是我不确定为什么需要第二遍,除非从设计师的角度来看。     

要回复问题请先登录注册