1

我正在我们的 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 代码?

4

3 回答 3

1

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

如果任何人都可以直接回答原始问题,我会保留这个问题。

于 2014-10-15T05:52:54.330 回答
0

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

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

为了实现这一点,需要完成两个主要任务:

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

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

包括自定义构建过程模板

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

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

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

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

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

创建自定义活动

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

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

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

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

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

参考:

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

[1]: Ewald Hofman - 自定义团队建设

于 2014-10-15T11:13:26.913 回答
0

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

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

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

于 2014-10-19T17:49:13.693 回答