繁体   English   中英

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

[英]Mono / MonoDevelop: Get solution version at runtime

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

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

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

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♯代码中,您可以创建如下属性:

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;添加using System.Reflection; 如果还没有的话
  • 要将release-version.txt文件添加到版本控件的忽略列表(例如.gitignore等)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM