File Content Replacer
File Content Replacer is the build feature which processes text files by performing regular expression replacements before a build. After the build, it restores the file content to the original state.
The common case of using File Content Replacer is replacing one attribute at a time in particular files, for example, it can be used to patch files with the build number.
You can add more than one File Content Replacer build feature if you wish to:
replace more than one attribute
replace one and the same attribute in different files/projects with different values
This feature extends the capabilities provided by AssemblyInfo Patcher.
See how to add a build feature.
File Content Replacer Settings
You can specify the values manually or use value presets for replacement, which can be edited if needed.
Option | Description |
---|---|
Template (optional) | File Content Replacer provides a template for every attribute to be replaced. Clicking the Load Template button displays the combobox with templates containing value presets for replacement. The templates can be filtered by language (for example, |
Process files | Click Edit file list and specify paths to files where the values to be replaced will be searched. Provide a newline- or comma-separated set of rules in the form of If a predefined template is selected, the files associated with that template will be used. |
Fail build if no files match pattern | Enabled by default. Disable this option to prevent build failure even if no files match the specified pattern. Note that if the runner finds at least one file that matches the given pattern, the step is considered successful even if this file has no content to replace. |
File encoding | By default, TeamCity will autodetect the file encoding. To specify the encoding explicitly, select it from the drop-down menu. When specifying a custom encoding, make sure it is supported by the agent. If a pre-defined template is selected, the file encoding associated with that template will be used. |
Find what | Specify a pattern to search for, in the regular expression format. You can disable the MULTILINE mode by adding |
Match case | By default, the comparison is case-sensitive. Uncheck for case-insensitive languages. |
Regex mode | Enabled by default and applies to both the search and replacement strings. Uncheck to use fixed strings. |
Replace with | Type the text to be used for replacing the characters in the Find what box. To delete the characters in the Find what box from your file, leave this box blank. $N sequence references N-th capturing group. All backslashes ( |
Templates
This section lists the available replacement templates.
.NET templates
The templates for replacing the following Assembly attributes are provided (see this section for comparison with AssemblyInfo Patcher):
.NET Core csproj templates
AssemblyName
AssemblyTitle
AssemblyVersion
Authors
Company
Copyright
Description
FileVersion
PackageId
PackageVersion
Product
Title
Version
VersionPrefix
VersionSuffix
MFC templates
The templates for replacing the following MFC C++ resource keys are provided:
FileDescription
CompanyName
ProductName
LegalCopyright
FileVersion*
ProductVersion*
Xcode templates
The templates for replacing the following Core Foundation Keys in Info.plist
files are provided:
CFBundleVersion
CFBundleShortVersionString
or both
CFBundleVersion
andCFBundleShortVersionString
at the same time
Examples
Extending an attribute value with a custom suffix
Suppose you do not want to replace your AssemblyConfiguration
with a fixed literal, but want to preserve your AssemblyConfiguration
from AssemblyInfo.cs
and just extend it with a custom suffix, for example,: [assembly: AssemblyConfiguration("${AssemblyConfiguration} built by TeamCity")])
.
Do the following: change the default replacement $1MyAssemblyConfiguration$7
to $1$5 built by TeamCity$7
.
For changing complex regex patterns, this external tool might be useful.
Patching only specified files
The default AssemblyInfo
templates follow the usual Visual Studio project/solution layout; but a lot of information may be shared across multiple projects and can reside in a shared file (for example, CommonAssemblyInfo.cs
).
Suppose you want to patch this shared file only; or you want to patch AssemblyInfo.cs
files on a per-project basis.
Do the following:
Load the
AssemblyInfo
template corresponding to the attribute you are trying to process (for example,AssemblyVersion
)Change the list of file paths in the Look in field from the default
*/Properties/AssemblyInfo.cs
to*/CommonAssemblyInfo.cs
or list multiple comma- or new-line separated files here, for example,myproject1/Properties/AssemblyInfo.cs, myproject2/Properties/AssemblyInfo.cs
.
Specifying path patterns which contain spaces
Spaces are usually considered a part of the pattern, unless they follow a comma, as the comma is recognised as a delimiter.
Note that the TeamCity server UI trims leading and trailing spaces in input fields, so a single-line pattern like <spaces>foo.bar
will become foo.bar
upon save. The following workarounds are available:
Changing only the last version part / build number of the AssemblyVersion attribute:
Suppose, your AssemblyVersion
in AssemblyInfo.cs
is Major.Minor.Revision.Build
(set to 1.2.3.*
), and you want to replace the Build
portion (following the last dot (the *
) only.
Load the AssemblyVersion
in AssemblyInfo (C#) template and change the default pattern:
to
and change the default replacement:
to