.net 如何将GitVersion版本转换为二进制文件?

s71maibg  于 2022-11-26  发布在  .NET
关注(0)|答案(1)|浏览(106)

我正在使用GitVersion来版本化我的C#.NET应用程序。我的应用程序还有一个-V选项,用于显示二进制文件的当前版本。
如何将数据从GitVersion导入应用程序,以便在每次构建时更新?

fnx2tebb

fnx2tebb1#

我使用PowerShell脚本和预构建事件的组合得到了它:
脚本如下(在项目目录中保存为gitversion.ps1

$gitVersionJson = dotnet gitversion /output json
$By = [System.Text.Encoding]::Unicode.GetBytes($gitVersionJson)
$output =[Convert]::ToBase64String($By)

"using System;
using System.Collections.Generic;
using System.Text;
using System.Text.Json;

class GitVersion {
    private static Dictionary<string, object> _values;
    private static Dictionary<string, object> Values {
        get {
            if (_values == null) {              
                byte[] data = Convert.FromBase64String(""$output"");
                string decodedString = Encoding.Unicode.GetString(data);
                _values = JsonSerializer.Deserialize<Dictionary<string, object>>(decodedString);
            }

            return _values;
        }
    }

    public static object MajorMinorPatch {
        get {
            return Values[""MajorMinorPatch""];
        }
    }

}
" | Out-File GitVersion.cs

"Generated GitVersion.cs" | Write-Output

然后,作为预构建事件,我在Build设置中添加了以下内容:

powershell -ExecutionPolicy Bypass -NoProfile -NonInteractive -File "$(ProjectDir)gitversion.ps1"

或者在myproject.csproj中:

<Target Name="PreBuild" BeforeTargets="PreBuildEvent">
   <Exec Command="powershell -ExecutionPolicy Bypass -NoProfile -NonInteractive -File &quot;$(ProjectDir)gitversion.ps1&quot; " />
</Target>

这将创建一个GitVersion类,可以在代码中使用:

Console.WriteLine(GitVersion.MajorMinorPatch);

相关问题