在Team Foundation Server构建期间,是否可以在我的某个项目中修改web.config文件?在我的web.config文件中,我有两个设置键:VersionNumber
和BuildNumber
。
是否可以根据TFS中构建的ID更改BuildNumber
的值?
答案 0 :(得分:4)
由于您使用的是TFS 2013,因此您可以选择比修改工作流的旧方法更简单的方法 - 使用PowerShell。
如果您正在使用构建模板TfvcTemplate.12.xaml(这是TFS 2013中的新默认值),那么您可以设置一些额外的构建定义参数来指定要运行的Powershell脚本。这样你只需编写一些获得TFS内部版本号的PowerShell代码(来自环境变量),然后找到你的web.config文件并对其进行更改。
在TFS社区构建扩展项目中发布了一个示例脚本,它将执行与您可以修改的非常相似的操作。它找到所有AssemblyInfo.cs文件,然后使用RegEx修改它们以根据TFS内部版本号更新内部版本号。
请在此处查看示例PS脚本:https://tfsbuildextensions.codeplex.com/SourceControl/latest#Scripts/ApplyVersionToAssemblies.ps1
在此处查看有关如何修改构建以运行PowerShell的一些文档:http://msdn.microsoft.com/en-us/library/dn376353.aspx
答案 1 :(得分:1)
答案是肯定的,尽管这不是一件容易的事。我过去使用两种方法完成了这项工作。
方法1 :使用CodeActivities并更改TFS Build工作流XAML文件,将新的CodeActivity包含为工作流步骤。
这是一篇关于使用自定义代码活动创建自定义工作流程的文章(它有点过时但仍然相关):
基本上,您创建一个从CodeActivity继承的新对象,为您的输入创建属性(BuildNumber,VersionNumber,TargetFile),在TargetFile上执行您的操作并保存它。然后,将这个新DLL与您的活动连接到TFS Workflow XAML,在所需的构建步骤中注入您的活动(在您的情况下,我打赌后期构建和预打包以确保应用xml转换)。
方法2 : 将所需的属性标记到TFS XAML文件中的MSBuild调用上,以便将它们传递到MSBuild,并可用作$(BuildNumber)和$(VersionNumber)。然后,您可以使用MSBuild任务在适当的时间将属性注入文件。