【问题标题】:How to execute arbitrary line of code in TFS build process?如何在 TFS 构建过程中执行任意行代码?
【发布时间】:2014-12-10 01:44:38
【问题描述】:

我正在我们的 TFS 服务器中创建自定义流程模板。

我想在此过程中执行以下行,以根据当前的MMDD自动修改AssemblyInfo.cs中的程序集修订号:

File.WriteAllText(file, Regex.Replace(File.ReadAllText(file), "(?<=\[assembly: AssemblyFileVersion\(""[0-9]*.[0-9]*.[0-9]*.)[0-9]*(?=""\)\])", Function(m) DateTime.Now.ToString("MMdd")))

不幸的是,我不知道如何在构建过程中执行任意行的 VB.NET 代码。没有称为“执行”、“运行”等的代码活动。

我试图通过在 WriteBuildMessage() 调用中插入一个 lambda 函数来破解它,但发现不允许使用 lambda:

(编辑:在修复了该表达式的其他问题后,它现在只是给出错误:“语句 lambdas 无法转换为表达式树” - 因此我无法在这里做我想做的事情。如果“ File.WriteAllLines" 是字符串而不是 void 然后我可以返回它并笑。)

有没有一种方法可以在构建过程中执行任意行 VB.NET 代码?

【问题讨论】:

  • 您使用的是什么版本的 TFS?

标签: xaml tfs msbuild build-process build-process-template


【解决方案1】:

注意:我通过直接在 System.IO.File.WriteAllText 上向 InvokeMethod 添加一个节点,将 Regex.Replace 调用作为参数之一传递来绕过它。

如果有人可以直接回答原始问题,我将保留问题。

【讨论】:

    【解决方案2】:

    正如您自己提到的,可以使用“InvokeMethod”来稍微执行一行代码。

    我的建议是创建一个自定义活动,您可以在其中为其提供参数,例如文件名和文件路径。

    为了实现这两个主要任务需要:

    1. 包括自定义构建过程模板
    2. 创建自定义活动

    您可以在当前解决方案中执行此操作,也可以创建一个全新的解决方案来处理您的自定义活动和流程模板。

    包括自定义构建过程模板

    无论您选择使用当前解决方案还是新解决方案,将流程构建模板包含在单独的项目中都很重要。

    该项目需要是一个“活动库”,位于已安装(VS 2013)下:

    右键解决方案 -> 添加.. -> 新建项目... -> Visual C# -> 工作流

    在此项目中,您可以添加您一直在处理的流程模板,方法是将其添加为现有项目并使其成为链接。这可以通过按“添加”按钮上的小箭头来完成

    包含此内容时,您需要包含多个参考资料,可在此处找到 [1]

    创建自定义活动

    至于构建过程模板,所有自定义活动都需要构建一个项目。这是为了确保在使用它们时,它只是引用项目或包含 dll。

    这个项目还需要是一个活动库,这次要在其中创建活动。

    活动是代码活动,可以通过以下方式创建:

    右键项目 -> 添加 -> 新项目... -> Visual C# 项目 -> 工作流 -> 代码活动

    同样,这个项目需要几个参考才能构建,可以在这里找到[1]

    参考资料:

    有关更多信息和想法,请查看以下内容:

    [1]:Ewald Hofman - Customize Team Build

    【讨论】:

    • 感谢 PS Christian,我认为这是我的方法的可行替代方案,因此将其标记为解决方案。实际上,我发现“InvokeMethod”的方式更简单,因为它不涉及创建新的类或项目。
    【解决方案3】:

    您不应该自己创建它。您应该使用 TFS 社区构建工具中内置的 precreate TfsVersion 活动。

    https://tfsbuildextensions.codeplex.com/wikipage?title=How%20to%20integrate%20the%20TfsVersion%20build%20activity&referringTitle=Documentation

    此工具将完成所有繁重工作,并受 Visual Studio ALM Ranger 和 MVP 的支持。

    【讨论】:

      猜你喜欢
      • 2011-01-27
      • 1970-01-01
      • 2017-03-16
      • 2017-04-15
      • 1970-01-01
      • 2011-09-21
      • 1970-01-01
      • 1970-01-01
      • 2011-02-03
      相关资源
      最近更新 更多