c#通过环境变量分配版本号
c# assign version number via Environment Variable
我目前有一个 VersionInfo.cs
文件,其中包含以下内容。
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
//Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Version
// Revision
//
//You can specify all the values or you can defaul the Revision and Build Numbers
//by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
此文件作为 link 添加到我的解决方案中的所有项目中,因此一次更新版本号,更新所有项目。这很好用。
但我想知道是否可以从环境变量中检索版本号,然后在 VersionInfo.cs
文件中使用它?这可以在 VersionInfo.cs
文件本身中完成吗?
我搜索过类似的内容,但到目前为止一无所获。
似乎无法在 VersionInfo.cs
内部完成。尽管可以将特殊符号传递给 C# 编译器(另请参阅 MSDN Article),但它们不能保存值,这与 C/C++ 符号不同。
但是,当然可以通过算法生成 VersionInfo.cs
,例如,另一个简单的 C# 程序。首先,编写一个程序,用从另一个来源(可能来自 Environment.GetEnvironmentVariable
方法调用)获得的信息修改 VersionInfo.cs
。然后将 pre-build 命令添加到项目的构建中,有关如何执行此操作的详细信息,请参阅 MSDN article。在 pre-build 事件中,调用您的程序,以便它在调用编译器之前更新 VersionInfo.cs
。
这是一个 PowerShell 脚本,它根据名为 BUILD_NUMBER
.
的环境变量更新 AssemblyVersion
和 AssemblyFileVersion
if (Test-Path env:BUILD_NUMBER) {
Write-Host "Updating AssemblyVersion to $env:BUILD_NUMBER"
# Get the AssemblyInfo.cs
$assemblyInfo = Get-Content -Path .\MyShinyApplication\Properties\AssemblyInfo.cs
# Replace last digit of AssemblyVersion
$assemblyInfo = $assemblyInfo -replace
"^\[assembly: AssemblyVersion\(`"([0-9]+)\.([0-9]+)\.([0-9]+)\.[0-9]+`"\)]",
('[assembly: AssemblyVersion("...' + $env:BUILD_NUMBER + '")]')
Write-Host ($assemblyInfo -match '^\[assembly: AssemblyVersion')
# Replace last digit of AssemblyFileVersion
$assemblyInfo = $assemblyInfo -replace
"^\[assembly: AssemblyFileVersion\(`"([0-9]+)\.([0-9]+)\.([0-9]+)\.[0-9]+`"\)]",
('[assembly: AssemblyFileVersion("...' + $env:BUILD_NUMBER + '")]')
Write-Host ($assemblyInfo -match '^\[assembly: AssemblyFileVersion')
$assemblyInfo | Set-Content -Path .\MyShinyApplication\Properties\AssemblyInfo.cs -Encoding UTF8
} else {
Write-Warning "BUILD_NUMBER is not set."
}
从构建系统上的预构建步骤调用此脚本。
我目前有一个 VersionInfo.cs
文件,其中包含以下内容。
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
//Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Version
// Revision
//
//You can specify all the values or you can defaul the Revision and Build Numbers
//by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
此文件作为 link 添加到我的解决方案中的所有项目中,因此一次更新版本号,更新所有项目。这很好用。
但我想知道是否可以从环境变量中检索版本号,然后在 VersionInfo.cs
文件中使用它?这可以在 VersionInfo.cs
文件本身中完成吗?
我搜索过类似的内容,但到目前为止一无所获。
似乎无法在 VersionInfo.cs
内部完成。尽管可以将特殊符号传递给 C# 编译器(另请参阅 MSDN Article),但它们不能保存值,这与 C/C++ 符号不同。
但是,当然可以通过算法生成 VersionInfo.cs
,例如,另一个简单的 C# 程序。首先,编写一个程序,用从另一个来源(可能来自 Environment.GetEnvironmentVariable
方法调用)获得的信息修改 VersionInfo.cs
。然后将 pre-build 命令添加到项目的构建中,有关如何执行此操作的详细信息,请参阅 MSDN article。在 pre-build 事件中,调用您的程序,以便它在调用编译器之前更新 VersionInfo.cs
。
这是一个 PowerShell 脚本,它根据名为 BUILD_NUMBER
.
AssemblyVersion
和 AssemblyFileVersion
if (Test-Path env:BUILD_NUMBER) {
Write-Host "Updating AssemblyVersion to $env:BUILD_NUMBER"
# Get the AssemblyInfo.cs
$assemblyInfo = Get-Content -Path .\MyShinyApplication\Properties\AssemblyInfo.cs
# Replace last digit of AssemblyVersion
$assemblyInfo = $assemblyInfo -replace
"^\[assembly: AssemblyVersion\(`"([0-9]+)\.([0-9]+)\.([0-9]+)\.[0-9]+`"\)]",
('[assembly: AssemblyVersion("...' + $env:BUILD_NUMBER + '")]')
Write-Host ($assemblyInfo -match '^\[assembly: AssemblyVersion')
# Replace last digit of AssemblyFileVersion
$assemblyInfo = $assemblyInfo -replace
"^\[assembly: AssemblyFileVersion\(`"([0-9]+)\.([0-9]+)\.([0-9]+)\.[0-9]+`"\)]",
('[assembly: AssemblyFileVersion("...' + $env:BUILD_NUMBER + '")]')
Write-Host ($assemblyInfo -match '^\[assembly: AssemblyFileVersion')
$assemblyInfo | Set-Content -Path .\MyShinyApplication\Properties\AssemblyInfo.cs -Encoding UTF8
} else {
Write-Warning "BUILD_NUMBER is not set."
}
从构建系统上的预构建步骤调用此脚本。