【问题标题】:c# assign version number via Environment Variablec#通过环境变量分配版本号
【发布时间】:2016-08-02 11:37:20
【问题描述】:

我目前有一个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")]

此文件作为链接添加到我的解决方案中的所有项目,因此将版本号更新为一个,更新所有项目。这工作正常。

但我想知道是否可以从环境变量中检索版本号,然后在VersionInfo.cs 文件中使用它?这可以在VersionInfo.cs 文件本身中完成吗?

我搜索了类似的东西,但到目前为止一无所获。

【问题讨论】:

标签: c# environment-variables version-numbering


【解决方案1】:

这是一个 PowerShell 脚本,它根据名为 BUILD_NUMBER 的环境变量更新 AssemblyVersionAssemblyFileVersion

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("$1.$2.$3.' + $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("$1.$2.$3.' + $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."
}

从构建系统的预构建步骤调用此脚本。

【讨论】:

    【解决方案2】:

    似乎不可能在VersionInfo.cs 本身内部进行。尽管可以将特殊符号传递给 C# 编译器(另请参阅 MSDN Article 关于这一点),但它们不能保存值,这与 C/C++ 符号不同。

    但是,当然可以使用算法生成VersionInfo.cs,例如,使用另一个简单的 C# 程序。首先,编写一个程序,用从另一个来源获得的信息修改VersionInfo.cs,可能来自Environment.GetEnvironmentVariable 方法调用。然后将 pre-build 命令添加到项目的构建中,有关如何执行此操作的详细信息,请参阅MSDN article。在 pre-build 事件中,调用您的程序,以便在调用编译器之前更新 VersionInfo.cs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-30
      • 1970-01-01
      • 2019-05-17
      相关资源
      最近更新 更多