【发布时间】:2018-06-21 22:01:11
【问题描述】:
我希望在运行时检索应用程序版本(本质上是解决方案文件中的 <ReleaseVersion> 属性)。如何通过代码访问它?
【问题讨论】:
-
我也想要一个答案,因为即使没有 AssemblyInfo.cs,这个属性似乎也被忽略了。
标签: c# mono monodevelop
我希望在运行时检索应用程序版本(本质上是解决方案文件中的 <ReleaseVersion> 属性)。如何通过代码访问它?
【问题讨论】:
标签: c# mono monodevelop
在 .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 编译)上进行了测试。
【讨论】:
您是否尝试过使用本论坛中的建议 --> get current version
【讨论】:
这是一个丑陋的 hack,但您可以利用 BeforeBuild 目标将该属性写入文件,然后您可以立即将其作为嵌入式资源包含在内。在您的 *.csproj 文件中:
<ItemGroup>
<EmbeddedResource Include="release-version.txt" />
</ItemGroup>
<!-- .... -->
<Target Name="BeforeBuild">
<Exec WorkingDirectory="$(ProjectDir)" Command="echo $(ReleaseVersion) >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; 添加到文件顶部(如果您尚未添加)release-version.txt 文件添加到版本控制的忽略列表(例如.gitignore 等)【讨论】: