我想要一个函数返回构建已部署应用程序/库的源的最后修订/提交 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/