Mono / MonoDevelop:在运行时获取解决方案版本

本文关键字:获取 解决方案 版本 运行时 MonoDevelop Mono | 更新日期: 2023-09-27 18:03:20

我希望在运行时检索应用程序版本(本质上是解决方案文件中的<ReleaseVersion>属性)。如何通过代码访问它?

Mono / MonoDevelop:在运行时获取解决方案版本

在。net中设置应用程序版本(因此可能是MONO)的标准方法是使用AssemblyVersion属性。这通常在AssemblyInfo.cs文件中指定,但也可以在其他文件中指定,如下所示。

要在运行时获取版本,可以使用AssemblyName。版本属性。以下是来自给定链接的代码的稍微修改版本:

using System;
using System.Reflection;
[assembly:AssemblyVersion("1.1.0.0")]
class Example
{
    static void Main()
    {
        Console.WriteLine("The version of the currently executing assembly is: {0}",
          Assembly.GetExecutingAssembly().GetName().Version);
    }
}

在编译和运行时,它产生如下结果:

当前执行的程序集版本为:1.1.0.0

以上内容在。net (Visual Studio 2010)和Mono 3.0(使用mcs从命令行编译,而不是Mono Develop)上进行了测试。

您是否尝试过使用本论坛的建议->获取当前版本

这是一个丑陋的hack,但是您可以利用BeforeBuild目标将该属性写入文件,然后将其作为嵌入式资源立即包含。在你的*里。csproj文件:

<ItemGroup>
    <EmbeddedResource Include="release-version.txt" />
</ItemGroup>
<!-- .... -->
<Target Name="BeforeBuild">
    <Exec WorkingDirectory="$(ProjectDir)" Command="echo $(ReleaseVersion) &gt;release-version.txt" />
</Target>

…然后在你的C&sharp;在代码中,您可以创建这样一个属性:

public static string Version {
    get {
        using (StreamReader resourceReader = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("SBRL.GlidingSquirrel.release-version.txt")))
        {
            return resourceReader.ReadToEnd().Trim();
        }
    }
}

这应该适用于所有主要的操作系统。不要忘记:

  • 添加using System.Reflection;到你的文件的顶部,如果你还没有
  • release-version.txt文件添加到版本控制的忽略列表(例如.gitignore等)