c# - 从已部署的应用程序中检索最后一次提交 ID/修订号

标签 c# java c++ git svn

我想要一个函数返回构建已部署应用程序/库的源的最后修订/提交 ID。

我一直在使用 C++ 中的 __DATE____TIME__ 宏,但这种方法有明显的缺点。

有哪些工具可以自动实现这一目标?

我正在为 C++(Linux、SVN)使用 Eclipse-CDT,但我也对 git 解决方案以及用 Java 和 C# 编写的源代码感兴趣。

最佳答案

通过使用 Visual Studio 和 C#,您可以在预构建步骤中调用 SubWCRev带有模板文件的命令,该文件将被复制到解决方案中使用的文件中。

预构建步骤中的命令是:

<PreBuildEvent>SubWCRev "$(ProjectDir)\" "$(ProjectDir)VersionProvider.template.cs" "$(ProjectDir)VersionProvider.cs"</PreBuildEvent>

在项目中添加以下两个文件:

<Compile Include="VersionProvider.cs">
  <DependentUpon>VersionProvider.template.cs</DependentUpon>
</Compile>
<None Include="VersionProvider.template.cs" />

有了这个内容:

internal static class VersionProvider
{
    /// <summary>
    /// Provides the current subversion revision number
    /// </summary>
    internal const string CurrentSVNRevision = "$WCREV$";
}

最后但同样重要的是在 AssemblyInfo.cs 中添加以下行:

[assembly: AssemblyInformationalVersion(VersionProvider.CurrentSVNRevision)]

该项目将通过这种方式自动获取该项目文件夹的当前 subversion 修订号,并将其烘焙到应用程序的版本信息中,该版本信息可以在文件属性的详细信息页面上看到。

您还可以在运行时通过代码检索此信息:

private string GetAdditionalVersionInfo()
{
    var assembly = Assembly.GetEntryAssembly();
    var attributesFound = assembly.GetCustomAttributes(typeof(AssemblyInformationalVersionAttribute), true);

    var version = attributesFound.OfType<AssemblyInformationalVersionAttribute>().FirstOrDefault();

    return version != null ? version.InformationalVersion : String.Empty;
}

关于c# - 从已部署的应用程序中检索最后一次提交 ID/修订号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9054697/

相关文章:

c# - 将 StringBuilder 传递给 PInvoke 函数

java - 要求输出始终采用小数点右侧 2 位、左侧 7 位格式

java - 在不同的文件类 java Android 中调用 EditText 值

java - 我在设置 jpanel 和框架时遇到问题

c++ - 在带有bool输入的std::function中使用boost变量

c# - 如何将执行查询的结果放入 ViewData 并传递给 View

c# - 关于使用 XML 作为存储过程参数和返回类型的意见

c++ - OpenCV minMaxLoc 函数中的段错误

c# - Winforms C# - 主 UI 线程繁忙时显示取消对话框

c++ - 将 1000x1000 复数矩阵的求逆从 Matlab 移植到 C++