【问题标题】:Mono / MonoDevelop: Get solution version at runtimeMono / MonoDevelop:在运行时获取解决方案版本
【发布时间】:2018-06-21 22:01:11
【问题描述】:

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

【问题讨论】:

  • 我也想要一个答案,因为即使没有 AssemblyInfo.cs,这个属性似乎也被忽略了。

标签: c# mono monodevelop


【解决方案1】:

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

要在运行时获取版本,您可以使用AssemblyName.Version property。以下是给定链接中代码的略微修改版本:

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 编译)上进行了测试。

【讨论】:

  • 为什么当您在 MonoDevelop/Xamarin Studio 中导航到项目时 --> 选项 --> 常规 --> 主要设置 --> 版本这个属性什么都不做?
  • @StephenFurlani - 抱歉,我不使用 Mono Develop,所以我对此一无所知。
  • 这就是问题所在。项目设置被忽略了,为什么还要有项目设置呢?
  • @StephenFurlani - 我认为这里有两个问题。 1) 如何在 Mono/.Net 中获取/检索应用程序版本。 2) 为什么在 Mono Develop IDE 中设置应用程序版本不起作用?前者的答案写在上面。后者的答案我不知道。这可能是一个错误。
  • 在Visual Studio中,右键项目、属性、应用程序、程序集信息,设置版本,对应AssemblyInfo.cs中的AssemblyVersion和AssemblyFileVersion。但是,在 Xamarin Studio 或 MonoDevelop 中,您可以右键单击项目、选项、主要设置并设置版本...它不会更改 AssemblyInfo.cs。相反,它会修改 csproj。我不确定如何/是否可以在运行时访问此元数据。
【解决方案2】:

您是否尝试过使用本论坛中的建议 --> get current version

【讨论】:

    【解决方案3】:

    这是一个丑陋的 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 等)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-14
      • 2013-09-07
      • 2011-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多