如何在TFS构建过程中执行任意代码行?

时间:2014-10-15 05:01:41

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

我正在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函数来破解它,但发现不允许使用lambdas:

enter image description here

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

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

3 个答案:

答案 0 :(得分:1)

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

如果有人能够直接回答原始问题,我会保留问题。

答案 1 :(得分:0)

正如你自己提到的,可以使用&#34; InvokeMethod&#34;为了在某​​种程度上执行一行代码。

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

为了实现这一目标,需要完成两项主要任务:

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

    包括自定义构建过程模板

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

    该项目需要成为一个&#34;活动图书馆&#34;在安装(VS 2013)下找到:

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

    在此项目中,您可以添加您正在处理的流程模板,方法是将其添加为现有项目并将其作为链接。这可以通过按下&#34;添加&#34;的小箭头来完成。按钮

    如果包含此内容,则需要包含多个引用,可在此处找到[1]

    创建自定义活动

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

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

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

    右键单击Project - &gt;添加 - &gt;新物品...... - &gt; Visual C#项目 - &gt;工作流程 - &gt;代码活动

    此项目需要多次引用才能构建,可在此处找到[1]

    参考文献:

    有关更多信息和想法,请看一下:

    [1]:Ewald Hofman - Customize Team Build

答案 2 :(得分:0)

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

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

这个工具将完成所有繁重工作,并得到Visual Studio ALM Ranger和MVP的支持。