1

我有一个构建过程在 NAnt 中,类似于以下结构(很多已被缩写)。我对可以从我的 NAnt 脚本中放入 Workflow 的内容以及应该转换为 MSBuild(或不转换)的内容有些困惑。NAnt 脚本中的各种目标将设置属性、复制文件、删除文件、调用外部进程(例如编译 VB6 项目)。任何将其移植到工作流的提示将不胜感激。如果您有任何问题,请告诉我。

<?xml ... >
<project ...>

  <!-- Get and combine paths -->
  <properties name="" value=""/>
  <properties name="" value=""/>
  <properties name="" value=""/>
  .
  .
  .
  . 

  <target name="Main">
   <!--Set Log Folder Name to include date and time.
   <mkdir dir="${LogDir}"/>

   <call target="DeleteTicketsFile"/> 
   <call target="GetTickets"/> 
   <call target="WriteTicketsToFile"/> 
   <call target="WriteProperties"/> 
   <call target="DeleteFolders" failonerror="true"/> 
   <call target="GetLatest" failonerror="true"/>
   <call target="BuildDOTNETSolution" failonerror="true"/>
   <call target="BuildVB6Projects" failonerror="true"/>
   . 
   .
   .
  <target name="BuildDOTNETSolution">

    <property name="ProjectName" value="Localcache" />

    <echo message="VCVarsAllBatFile = ${VCVarsAllBatFile}"/>
    <exec program="${VCVarsAllBatFile}"/>

    <property name="dotnetSlnFile" value="${path::combine(ProductDir, 'dot.net.sln')}"/>
    <property name="dotnetOutFile" value="${path::combine(LogDir, 'dotnet.out.txt')}"/>

    <echo message="dotnetSlnFile = ${dotnetSlnFile}"/>
    <echo message="dotnetOutFile = ${dotnetOutFile}"/>

    <delete file="${dotnetOutFile}" if="${file::exists(dotnetOutFile)}" failonerror="false"/>

    <!-- Build .NET solution in Release mode -->
    <exec program="${DevenvExe}">
      <environment>
        <variable name="COMSUPPORT" value="N"/>
        <variable name="COPYEXECENV" value="N"/>
      </environment>
      <arg value='"${dotnetSlnFile}"'/>
      <arg value='/Rebuild "Release|Any CPU"'/>
      <arg value='/Out "${dotnetOutFile}"'/>
    </exec>
  </target>

</project>
4

1 回答 1

3

我的建议是完全替换 NAnt 并使用 TFS Build Workflow 来自定义和维护您的构建。也就是说,如果您的 NAnt 脚本非常复杂,可能需要一些时间(尤其是如果您不熟悉基于 TFS 工作流的构建)。我的建议是让 Workflow Build 使用 InvokeProcess Activity 通过命令行 (nant.exe) 执行 NAnt 构建。然后,您可以逐步将 NAnt 脚本中的构建部分移到工作流中。

例如,整个 BuildDotNETSolution 目标看起来并没有做任何特别的事情,所有这些都已包含在 DefaultTemplate.xaml 构建工作流中,您只需在构建定义中指定 SolutionsToBuild 参数。

于 2012-04-18T20:27:33.773 回答