【发布时间】:2021-12-14 16:00:52
【问题描述】:
这个问题是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.Attribute 或 Namespace.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# 单行代码吗?
提前致谢
【问题讨论】:
-
为什么要求关闭这个问题?
-
阅读 GitVersion 的文档。它应该可以解决您的问题。
-
.NET 中没有为此内置任何内容。通常是构建系统处理将此类内容注入代码中。
-
您根本无法编写所显示的代码。这些属性的参数必须是常量。如果你连接常量,你可以在某个地方使用一个常量成员来添加一些东西,但是你不能调用一个方法,因此你不能启动 git。这必须在 C# 编译器之外作为前置步骤完成,然后将使用 C# 语法中的 requires 程序集属性合成一个文件,并包含在构建中。
-
想一想,您可以将
Build Events用于解决方案中的项目。看看这里:docs.microsoft.com/en-us/visualstudio/ide/…。在那里你可以调用一个运行 git 并将完整版本号存储在文本文件中的 bat 文件。然后作为另一个预构建步骤,您可以使用新内容重新创建版本文件。检查此问题以获取版本文件创建示例:stackoverflow.com/questions/26021684/….
标签: c# .net git command-line versioning