gpt4 book ai didi

.net-core - 使用 git log 使 MSBuild Exec 命令跨平台工作

转载 作者:行者123 更新时间:2023-12-05 05:12:40 26 4
gpt4 key购买 nike

我想在我的 ASP.NET Core 2.2 项目中这样做:

git log -1 --format="Git commit %h committed on %cd by %cn" --date=iso

但是作为预构建步骤,我将它包含在 csproj 中,如下所示:

<Target Name="PreBuild" BeforeTargets="PreBuildEvent">
<Exec Command="git log -1 --format=&quot;Git commit %25%25h committed on %25%25cd by %25%25cn&quot; --date=iso &gt; &quot;$(ProjectDir)/version.txt&quot;" />
</Target>

这适用于 Windows(如果我理解正确的话,%25 是 MSBuild 术语中的百分比,双百分比是命令行转义,所以我们有 %25%25)。它给了我这种 version.txt:

Git commit abcdef12345 committed on 2019-01-25 14:48:20 +0100 by Jeroen Heijmans

但是如果我在 Ubuntu 18.04 上使用 dotnet build 执行上面的操作,那么我会在我的 version.txt 中得到这个:

Git commit %h committed on %cd by %cn

如何重组我的 Exec 元素,使其在 Windows(Visual Studio、Rider 或 dotnet CLI)和 Linux(Rider 或 dotnet CLI)上运行?

最佳答案

为了避免成为“DenverCoder9”,这里有一个最终可行的解决方案:

有两个选项都使用了 Condition 属性的强大功能。

选项 1:

复制 PreBuild Exec 元素,每个元素都有一个用于 Unix like OS 的条件和一个用于非 Unix like OS 的条件。

<Target Name="PreBuild" BeforeTargets="PreBuildEvent">
<Exec Condition="!$([MSBuild]::IsOSUnixLike())" Command="git log -1 --format=&quot;Git commit %25%25h committed on %25%25cd by %25%25cn&quot; --date=iso &gt; &quot;$(ProjectDir)/version.txt&quot;" />
<Exec Condition="$([MSBuild]::IsOSUnixLike())" Command="git log -1 --format=&quot;Git commit %25h committed on %25cd by %25cn&quot; --date=iso &gt; &quot;$(ProjectDir)/version.txt&quot;" />
</Target>

选项 2:

将属性组添加到应用程序根级别的 Directory.Build.props 文件,并在 PreBuild Exec 命令中使用它。

<!-- file: Directory.Build.props -->
<Project>
<!-- Adds batch file escape character for targets using Exec command when run on Windows -->
<PropertyGroup Condition="!$([MSBuild]::IsOSUnixLike())">
<AddEscapeIfWin>%25</AddEscapeIfWin>
</PropertyGroup>
</Project>
<!-- Use in *.csproj -->
<Target Name="PreBuild" BeforeTargets="PreBuildEvent">
<Exec Command="git log -1 --format=&quot;Git commit $(AddEscapeIfWin)%25h committed on $(AddEscapeIfWin)%25cd by $(AddEscapeIfWin)%25cn&quot; --date=iso &gt; &quot;$(ProjectDir)/Resources/version.txt&quot;" />
</Target>

关于.net-core - 使用 git log 使 MSBuild Exec 命令跨平台工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54368280/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com