我正在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:
(编辑:在解决了该表达式的其他问题之后,它现在只是给出错误:“语句lambdas无法转换为表达式树” - ergo我不能做我想在这里做的事。如果“ File.WriteAllLines“是字符串而不是void然后我可以返回并笑。”
有没有办法可以在构建过程中执行任意一行VB.NET代码?
答案 0 :(得分:1)
注意:我通过直接在System.IO.File.WriteAllText上向InvokeMethod添加节点来解决这个问题,并将Regex.Replace调用作为参数之一传递。
如果有人能够直接回答原始问题,我会保留问题。
答案 1 :(得分:0)
正如你自己提到的,可以使用&#34; InvokeMethod&#34;为了在某种程度上执行一行代码。
我建议创建一个自定义活动,您可以在其中提供参数,例如文件名和文件路径。
为了实现这一目标,需要完成两项主要任务:
您可以在当前的解决方案中执行此操作,也可以创建一个全新的解决方案来处理自定义活动和流程模板。
无论您选择使用当前解决方案还是新解决方案,都必须将流程构建模板包含在单独的项目中。
该项目需要成为一个&#34;活动图书馆&#34;在安装(VS 2013)下找到:
右键单击解决方案 - &gt;添加.. - &gt;新项目...... - &gt; Visual C# - &gt;工作流
在此项目中,您可以添加您正在处理的流程模板,方法是将其添加为现有项目并将其作为链接。这可以通过按下&#34;添加&#34;的小箭头来完成。按钮
如果包含此内容,则需要包含多个引用,可在此处找到[1]
对于构建过程模板,所有自定义活动都需要构建一个项目。这是为了确保在使用它们时,它只是引用项目或包含dll。
此项目还需要是一个活动库,这次要创建活动。
活动是代码活动,可以通过以下方式创建:
右键单击Project - &gt;添加 - &gt;新物品...... - &gt; Visual C#项目 - &gt;工作流程 - &gt;代码活动
此项目需要多次引用才能构建,可在此处找到[1]
有关更多信息和想法,请看一下:
答案 2 :(得分:0)
你不应该自己创造。您应该使用TFS社区构建工具中内置的precreate TfsVersion活动。
这个工具将完成所有繁重工作,并得到Visual Studio ALM Ranger和MVP的支持。