在预构建事件的TFS构建过程中运行批处理文件(* .bat)并找到其输出

时间:2016-11-22 09:15:57

标签: visual-studio batch-file tfs msbuild

我在TFS 2013上创建了一个构建定义,在构建定义的流程选项卡中,有5个部分用于构建流程参数

  1. TF Version Control
  2. 构建
  3. 测试
  4. 发布符号
  5. 高级
  6. 在Build部分中有5个子部分

    1. 项目
    2. 配置
    3. 清理构建
    4. 输出位置
    5. 高级。
    6. Inside Advanced部分中有一个“预构建脚本参数”选项& “prebuild script path”。

      在“预建脚本路径”中,我提供了批处理文件的路径。

      此批处理文件调用在同一位置可用的exe文件。在批处理文件中,我写了以下几行

      start "My Project" MyProject.exe
      

      MyProject.exe是一个控制台应用程序,代码如下

      string[] lines = { "First line", "Second line", "Third line" };
      string fileName2 = DateTime.Now.ToLongDateString().Replace("//","_").Replace(",","_") + DateTime.Now.ToLongTimeString().Replace(":", "_").Replace(" ","") + ".txt";
      System.IO.File.WriteAllLines(fileName2, lines);
      

      现在我正在运行这个TFS构建应用程序,然后它在预构建事件上花费了太多时间。 它运行了最后50分钟然后我停止了它。

      在添加批处理脚本之前,构建过程工作正常。

      现在我的问题是,如何确保我在批处理脚本中编写的内容成功运行并且exe文件正在编写* .txt文件,以便在哪里可以检查该文件? < / p>

      我已经浏览了这些链接

      Post build event in VS2012..Running a Batch file

      Problem Executing Batch File in Pre-Build Event

      但是他们说他们的构建失败但在我的情况下构建并没有失败,而是需要花费太长时间。

      很抱歉,如果这个问题无关紧要,或者我犯了一些错误。我是TFS构建集成的新手,并不太了解所有这些流程。

1 个答案:

答案 0 :(得分:1)

我可以在完成stijn提供的提示后解决我的问题。

以下是stijn给出的TIPS。您可以在评论中找到相同的内容。

  1. 不要依赖当前的工作目录,这几乎总是不好的做法。而是使用完整路径(硬编码,或传递例如项目的目录作为你的exe的参数),所以至少你知道在哪里找到你的txt文件。

  2. 如果您的构建挂起,则等待用户输入。可能是您的exe崩溃并且正在显示一个附加调试器的对话框

  3. 如果你的批处理文件真的如图所示,你不需要它:只需直接调用exe。

  4. 您可以将控制台输出添加到批处理文件/ exe以检查它在做什么,这应该在TFS中输出

  5. 然后我会做以下事情。

    1. 将exe文件路径直接命名为“pre-build script pat”并删除批处理文件。
    2. 从“预构建脚本参数”传递参数列表,并在控制台应用程序中将其作为参数处理。
    3. 将Framework版本从.NET 4.6更改为.NET 4.5,因为TFS服务器是TFS 2013,而其他应用程序使用的是.NET 4.5。
    4. 创建版本而不是构建版本。
    5. 我仍然遇到一个问题,我无法在物理位置创建文件,但我只打算检查我在“预构建脚本参数”框中传递的内容应该在exe文件中接收。< / p>

      所以我读了所有这些参数并将其作为文件名附加,然后显示无法创建文件名“abc_10,20,30,40,50.txt”,其中“10,20,30,40,50”是我通过的论点。

      因此,它确保我可以在exe文件中获取所有这些参数。

      此解决方案的所有功劳都归功于stijn。