.net core 编译时传递参数

.net core程序 如何在编译时加入git版本号 ,比如go语言可以在编译时 对代码变量赋值 如go -ldflags,.net core有类似的方法码

该回答引用GPTᴼᴾᴱᴺᴬᴵ
在 .NET Core 程序中添加 Git 版本号可以使用 MSBuild 和 GitVersion 工具来完成。

GitVersion 是一个命令行工具,它可以自动获取当前 Git 仓库的最新提交版本信息,并生成相应的版本号。而 MSBuild 是一个 .NET Core 编译工具,可以用来自动化编译构建。

下面是使用 MSBuild 和 GitVersion 的具体步骤:

1.安装 GitVersion
可以通过 Chocolatey 包管理器来安装 GitVersion,命令如下:

choco install gitversion.portable

安装完成后,在项目根目录下执行以下命令进行初始化:

gitversion init

这会在项目根目录下生成一个 GitVersion.yml 文件,用于配置 GitVersion 工具。

2.配置 GitVersion
打开 GitVersion.yml 文件,可以对 GitVersion 工具进行配置,例如设置版本前缀、版本后缀等。常用的配置项可以在文件中找到相应的注释。完成配置后,可以执行以下命令验证配置是否正确:

gitversion /showconfig

3.添加 MSBuild 目标
在 .NET Core 项目文件(.csproj 文件)中添加以下代码:

<PropertyGroup>
  <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>

<Target Name="PreBuild" BeforeTargets="PreBuildEvent">
  <Exec Command="gitversion /output buildserver /nofetch" ConsoleToMSBuild="true" />
  <ItemGroup>
    <Compile Include="**\*.cs" />
    <Compile Include="**\*.cshtml" />
    <Compile Include="**\*.config" />
    <Compile Include="**\*.json" />
    <Compile Include="**\*.xml" />
    <Compile Include="**\*.js" />
    <Compile Include="**\*.ts" />
  </ItemGroup>
  <Message Text="Building $(MSBuildProjectName) $(GitVersion_SemVer) $(GitVersion_SemVerMajorMinor)" />
</Target>

这里添加了一个名为 PreBuild 的 MSBuild 目标,用于在编译前执行 GitVersion 工具生成版本号,并将版本号传递给编译器。

4.编译项目
执行以下命令编译项目:

dotnet build

完成编译后,可以查看输出窗口,可以看到类似以下信息:

Building MyProject 1.0.0-beta.1+14

其中,MyProject 是项目名称,1.0.0-beta.1 是版本号,14 是 Git 提交次数。

可以在代码中通过 AssemblyInformationalVersion 属性获取版本号,例如:

using System.Reflection;

var version = Assembly.GetExecutingAssembly().GetCustomAttribute<AssemblyInformationalVersionAttribute>().InformationalVersion;

这里的 InformationalVersion 就是 GitVersion 工具生成的版本号。