有没有一个C#命令行命令行程序可以帮助我获得应用程序的GIT提交散列? [英] Is there a C# commandline command one-liner which can help me get the GIT commit hash of an application?

查看:29
本文介绍了有没有一个C#命令行命令行程序可以帮助我获得应用程序的GIT提交散列?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

此问题是this other one的后续问题。

在那个问题中,有人提到了[assembly: AssemblyVersion(...)]对文件AssemblyInfo.cs文件的用法,同时我发现在这样的行之前禁止执行任何处理,唯一允许的是:

[assembly: AssemblyVersion("1.0.0.0" + "-" + Namespace.Class.Attribute)], or:
[assembly: AssemblyVersion("1.0.0.0" + "-" + Namespace.Class.Method())]

原问题:
所以我的问题是:是否有一个Namespace.Class.AttributeNamespace.Class.Method()包含C#应用程序的提交散列(或SHA或缩写SHA)?

进一步调查后编辑
同时,我了解到git describe --always命令为我提供了我要查找的信息,因此我需要的信息如下:

[assembly: AssemblyVersion("1.0.0.0-" + Launch("git describe --always")]

.但我如何才能执行Launch()

我已经知道可以使用System.Diagnostics.Process()启动命令行命令,如下例所示:

System.Diagnostics.Process.Start(foldervar + "application.exe", "inputfile.txt");

.但这种方式不会捕获该命令的结果。

新问题:
那么,有谁知道如何使用C#一行程序来启动命令行命令并获得结果呢?

提前谢谢

MsBuild

现在可以使用推荐答案属性来设置版本(以及其他属性),而不是使用AssemblyVersionAttribute。使用MsBuild的优势在于,您可以在生成过程中计算这些值。

这将适用于any "new style"/"SDK style" project

签出:Assembly attribute properties

您最终将得到以下内容:

ConsoleApp5.csproj:
<Project Sdk="Microsoft.NET.Sdk">

    <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net6.0</TargetFramework>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>
    </PropertyGroup>

    <!-- Add the property group and the target below to your project file -->
    <PropertyGroup>
        <GenerateAssemblyVersionAttribute>true</GenerateAssemblyVersionAttribute>
        <GenerateAssemblyFileVersionAttribute>true</GenerateAssemblyFileVersionAttribute>
        <GenerateAssemblyInformationalVersionAttribute>true</GenerateAssemblyInformationalVersionAttribute>
    </PropertyGroup>

    <Target Name="AddGitShaToAssemblyVersions" BeforeTargets="GetAssemblyVersion" Returns="AssemblyVersion, FileVersion, InformationalVersion">
        <Exec ConsoleToMsBuild="true" Command="git describe --always">
            <Output TaskParameter="ConsoleOutput" PropertyName="GitSha" />
        </Exec>

        <PropertyGroup>
            <AssemblyVersion>1.1.1.1</AssemblyVersion>
            <FileVersion>1.1.1.1-$(GitSha)</FileVersion>
            <InformationalVersion>1.1.1.1-$(GitSha)</InformationalVersion>
        </PropertyGroup>
    </Target>

    <!-- Ignore the warning generated for the AssemblyFileVersion -->
    <PropertyGroup>
      <NoWarn>$(NoWarn);7035</NoWarn>
    </PropertyGroup>
</Project>
将在obj文件夹中生成一个文件,并自动将其包含在构建中。您可以在您的编辑器中打开此文件以查看生成的内容:

生成的内容:

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:4.0.30319.42000
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

using System;
using System.Reflection;

[assembly: System.Reflection.AssemblyCompanyAttribute("ConsoleApp5")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.1.1.1-3654148")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.1.1.1-3654148")]
[assembly: System.Reflection.AssemblyProductAttribute("ConsoleApp5")]
[assembly: System.Reflection.AssemblyTitleAttribute("ConsoleApp5")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.1.1.1")]

// Generated by the MSBuild WriteCodeFragment class.

对我来说,这样做的好处是所有逻辑都很好地封装在生成文件本身中,并且不需要在生成之前运行任何命令,也不需要将生成逻辑放入另一个脚本(如PowerShell脚本)中,而这些脚本是Visual Studio不知道的。

请确保从项目中删除现有的手动添加的AssemblyVersionETC属性,否则将收到该属性已指定两次的警告。

这篇关于有没有一个C#命令行命令行程序可以帮助我获得应用程序的GIT提交散列?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆