首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用git日志跨平台运行MSBuild执行命令

使用git日志跨平台运行MSBuild执行命令
EN

Stack Overflow用户
提问于 2019-01-25 15:28:38
回答 1查看 648关注 0票数 3

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

代码语言:javascript
复制
git log -1 --format="Git commit %h committed on %cd by %cn" --date=iso

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

代码语言:javascript
复制
<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术语中的百分比,而double %是命令行转义,那么我们就有了%25%25)。它给了我这种version.txt

代码语言:javascript
复制
Git commit abcdef12345 committed on 2019-01-25 14:48:20 +0100 by Jeroen Heijmans

但是如果我在Ubuntu18.04上使用dotnet build执行上面的操作,那么我就可以在我的version.txt中得到这个

代码语言:javascript
复制
Git commit %h committed on %cd by %cn

如何重新构造Exec元素,使其同时运行在Windows (Visual、Rider或dotnet )和Linux (Rider或dotnet )上?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-13 19:06:14

为了避免成为"DenverCoder9“,这里是最后的工作解决方案:

有两个选项,它们都使用Condition属性的功能。

选项1:

复制PreBuild Exec元素,每个元素具有Unix类OS的条件和非Unix类OS的条件。

代码语言:javascript
复制
<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命令中使用它。

代码语言:javascript
复制
<!-- 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> 
代码语言:javascript
复制
<!-- 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>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54368280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档