构建 C# 项目时提取 git 分支名称
Extract git branch name while building C# project
在构建 C# 项目 locally/CI 服务器时,我想控制 .csproj 文件中的 NuGet 包引用.如果开发人员在 github master 分支(locally/CI 服务器)上构建 C# 项目,我想添加 RC构建 NuGet 包参考,否则 PRE 发布 NuGet 包参考。这该怎么做?有人可以帮助我吗?
有些想法像 -
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<GitBranch>$(GitBranch.Trim())</GitBranch>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="GitInfo" Version="2.2.0" />
</ItemGroup>
<Choose>
<When Condition="$(GitBranch) == 'master'">
<ItemGroup>
<PackageReference Include="Data.Account.Domain.Messaging" Version="1.0.0-rc*" IncludePrerelease="true" />
</ItemGroup>
</When>
<Otherwise>
<ItemGroup>
<PackageReference Include="Data.Account.Domain.Messaging" Version="1.0.0-pre*" IncludePrerelease="true" />
</ItemGroup>
</Otherwise>
</Choose>
</Project>
您可以从 .git/HEAD 文件中读取 git 分支。像
这样的天真的实现
<PropertyGroup>
<GitBranch>$([System.IO.File]::ReadAlltext('$(MsBuildThisFileDirectory)\.git\HEAD').Replace('ref: refs/heads/', '').Trim())</GitBranch>
</PropertyGroup>
您可能想要调整获取该文件路径的方式,也许使用更强大的东西(例如,如果您只是签出 git 中的随机提交,该文件将不包含分支名称但是提交 SHA)
您还可以使用 GitInfo 本身的变量 $(GitRoot) 来构建路径,这只是对现有代码的一个小改动,但对我必须处理的情况有所帮助带有嵌套文件夹。
<PropertyGroup>
<GitBranch>$([System.IO.File]::ReadAlltext('$(GitRoot)\.git\HEAD').Replace('ref: refs/heads/', '').Trim())</GitBranch>
</PropertyGroup>
在构建 C# 项目 locally/CI 服务器时,我想控制 .csproj 文件中的 NuGet 包引用.如果开发人员在 github master 分支(locally/CI 服务器)上构建 C# 项目,我想添加 RC构建 NuGet 包参考,否则 PRE 发布 NuGet 包参考。这该怎么做?有人可以帮助我吗?
有些想法像 -
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<GitBranch>$(GitBranch.Trim())</GitBranch>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="GitInfo" Version="2.2.0" />
</ItemGroup>
<Choose>
<When Condition="$(GitBranch) == 'master'">
<ItemGroup>
<PackageReference Include="Data.Account.Domain.Messaging" Version="1.0.0-rc*" IncludePrerelease="true" />
</ItemGroup>
</When>
<Otherwise>
<ItemGroup>
<PackageReference Include="Data.Account.Domain.Messaging" Version="1.0.0-pre*" IncludePrerelease="true" />
</ItemGroup>
</Otherwise>
</Choose>
</Project>
您可以从 .git/HEAD 文件中读取 git 分支。像
这样的天真的实现<PropertyGroup>
<GitBranch>$([System.IO.File]::ReadAlltext('$(MsBuildThisFileDirectory)\.git\HEAD').Replace('ref: refs/heads/', '').Trim())</GitBranch>
</PropertyGroup>
您可能想要调整获取该文件路径的方式,也许使用更强大的东西(例如,如果您只是签出 git 中的随机提交,该文件将不包含分支名称但是提交 SHA)
您还可以使用 GitInfo 本身的变量 $(GitRoot) 来构建路径,这只是对现有代码的一个小改动,但对我必须处理的情况有所帮助带有嵌套文件夹。
<PropertyGroup>
<GitBranch>$([System.IO.File]::ReadAlltext('$(GitRoot)\.git\HEAD').Replace('ref: refs/heads/', '').Trim())</GitBranch>
</PropertyGroup>