文件内容替换器
File Content Replacer 是 构建功能,在构建之前通过执行正则表达式替换来处理文本文件。 构建后,它将文件内容恢复到原始状态。
tip
文件内容替换器只应与自动签出一起使用:配置此构建功能后,它将在第一个构建步骤之前运行。 TeamCity 首先会在构建检出目录中找到指定的文件进行替换,然后执行您的构建。
使用文件内容替换器的常见情况是在特定文件中一次替换一个属性,例如,它可以用于用构建编号修补文件。
如果您希望,您可以添加多个 "File Content Replacer" 构建功能:
替换多个属性
在不同的文件/项目中用不同的值替换同一属性
这个功能扩展了由 AssemblyInfo Patcher 提供的能力。
查看如何 添加构建功能。
您可以手动指定值,也可以使用可以编辑的值预设进行替换。
选项 | 描述 |
---|---|
模板(可选) | 文件内容替换器为每个需要替换的属性提供了一个模板。 点击Load Template按钮,将显示出一个包含替换值预设的模板下拉框。 模板可以通过在组合框中输入来根据语言(例如, |
处理文件 | 点击 编辑文件列表 并指定将在其中搜索需要替换值的文件路径。 以
如果选择了一个 预定义的模板,将使用与该模板关联的文件。 |
如果没有文件匹配模式,则构建失败 | 默认启用。 禁用此选项,即使没有文件与指定的模式匹配,也可以防止构建失败。 请注意,如果运行器找到至少一个符合给定模式的文件,即使该文件没有需要替换的内容,此步骤也会被认为是成功的。 |
文件编码 | 默认情况下,TeamCity 将自动检测文件编码。 要明确指定编码,您需要从下拉菜单中选择它。 在指定一个 自定义 编码时,请确保它被代理 支持。 如果选择了一个 预定义模板,将使用与该模板关联的文件编码。 |
查找内容 | 请指定一种要搜索的模式,该模式需用 正则表达式 格式。 您可以通过在模式字符串的开始处添加 |
区分大小写 | 默认情况下,比较区分大小写。 对于不区分大小写的语言,请取消选择。 |
正则表达式模式 | 默认启用,并同样适用于搜索字符串和替换字符串。 取消勾选以使用固定字符串。
|
替换为 | 在 Find what 框中输入要用于替换字符的文本。 要从您的文件中删除查找内容框中的字符,将此框留空。 $N 序列引用第 N 个捕获组。 所有没有特殊含义的反斜杠( |
此部分列出了可用的替换模板。
为替换以下的 Assembly 属性 提供了模板(请参阅 此部分 与 AssemblyInfo Patcher 进行比较):
AssemblyName
应用程序标题
AssemblyVersion
作者
公司
版权
描述
文件版本
PackageId
软件包版本
产品
标题
版本
VersionPrefix
VersionSuffix
提供了以下用于替换 MFC C++ 资源键 的模板:
文件描述
公司名称
产品名称
法律版权
文件版本*
产品版本*
note
在 MFC*.rc 文件中,
文件版本
和ProductVersion
各出现两次,一次在 点分隔的(例如:1.2.3.4
)格式中,另一次在 逗号分隔的(例如:1,2,3,4
)格式中。 如果您的%build.number%
参数具有1.2.3.{0}
的格式,建议使用两个具有不同定界符的构建参数,而不是单个%build.number%
。
在以下文件中提供了替换以下 Core Foundation Keys 的模板:
CFBundleVersion
CFBundleShortVersionString
或同时使用
CFBundleVersion
和CFBundleShortVersionString
假设您不想用固定的文字字面量替换您的 AssemblyConfiguration
,而想保留您的 AssemblyConfiguration
来自 AssemblyInfo.cs
,并只在其后加上自定义的后缀,例如: [assembly: AssemblyConfiguration("${AssemblyConfiguration} 由 TeamCity 构建")])
。
执行以下操作:将默认的替换 $1MyAssemblyConfiguration$7
更改为 $1$5 由 TeamCity$7 构建
。
对于更改复杂的 regex 模式,这个外部工具可能会有用。
默认的 AssemblyInfo
模板遵循通常的 Visual Studio 项目/解决方案布局;但是许多信息可能会在多个项目之间共享,并可以存储在一个共享文件中(例如, CommonAssemblyInfo.cs
)。
假设您只想修补这个共享文件;或者您想按项目为基础修补 AssemblyInfo.cs
文件。
请按照以下步骤操作:
加载与您试图处理的属性相对应的
AssemblyInfo
模板(例如,AssemblyVersion
)将 Look in 字段中的文件路径列表从默认的
*/Properties/AssemblyInfo.cs
更改为*/CommonAssemblyInfo.cs
,或者在此处列出多个用逗号或新行分隔的文件,例如,myproject1/Properties/AssemblyInfo.cs,myproject2/Properties/AssemblyInfo.cs
。
空格通常被认为是模式的一部分,除非它们在逗号之后,因为逗号被认为是分隔符。
请注意,TeamCity 服务器 UI 会在输入字段中删除前导和尾随空格,所以像 <spaces>foo.bar
这样的单行模式将在保存后变为 foo.bar
。 以下的解决方案可供参考:
假设,您在 AssemblyInfo.cs
中的 AssemblyVersion
是 主要.次要.修订.构建
(设置为 1.2.3.*
),您想替换 Build(构建)
部分(仅跟随最后一个点(即 *
))。
加载 AssemblyInfo (C#) 模板中的 AssemblyVersion
并更改默认模式:
(^\s*\[\s*assembly\s*:\s*((System\s*\.)?\s*Reflection\s*\.)?\s*AssemblyVersion(Attribute)?\s*\(\s*@?\")(([0-9\*])+\.?)+(\"\s*\)\s*\])
助力您
(^\s*\[\s*assembly\s*:\s*((System\s*\.)?\s*Reflection\s*\.)?\s*AssemblyVersion(Attribute)?\s*\(\s*@?\")(([0-9\*]+\.)+)[0-9\*]+(\"\s*\)\s*\])
并更改默认替换:
$1\%build.number%$7
助力您
$1$5\%build.number%$7
note
请确保您的
%build.number%
格式 仅包含一个小数,不含任何小数点,否则您可能会得到一个非标准版本的1.2.3.4.5.6.2600
(即,这里%build.counter%
是 一个有效值,而4.5.6.%build.counter%
不是)。
感谢您的反馈!