如何获得正在执行的程序集版本?

时间:2011-02-09 04:23:03

标签: c# .net .net-assembly

我正在尝试使用以下代码在C#3.0中获取正在执行的程序集版本:

var assemblyFullName = Assembly.GetExecutingAssembly().FullName;
var version = assemblyFullName .Split(',')[1].Split('=')[1];

还有另一种正确的方法吗?

6 个答案:

答案 0 :(得分:268)

两个选项......无论您始终可以调用的应用程序类型如何:

Assembly.GetExecutingAssembly().GetName().Version

如果是Windows Forms应用程序,如果专门针对产品版本,您可以随时通过应用程序进行访问。

Application.ProductVersion

使用GetExecutingAssembly作为程序集引用并不总是一个选项。因此,我个人觉得在项目中创建一个静态助手类很有用,我可能需要引用底层的程序集或程序集版本:

// A sample assembly reference class that would exist in the `Core` project.
public static class CoreAssembly
{
    public static readonly Assembly Reference = typeof(CoreAssembly).Assembly;
    public static readonly Version Version = Reference.GetName().Version;
}

然后我可以根据需要在我的代码中干净地引用CoreAssembly.Version

答案 1 :(得分:33)

在MSDN中, Assembly.GetExecutingAssembly Method ,是关于方法" getexecutingassembly"的注释,出于性能原因,只有在设计时不知道时才应调用此方法时间当前正在执行的程序集。

检索表示当前程序集的Assembly对象的推荐方法是使用程序集中找到的类型的Type.Assembly属性。

以下示例说明:

using System;
using System.Reflection;

public class Example
{
    public static void Main()
    {
        Console.WriteLine("The version of the currently executing assembly is: {0}",
                          typeof(Example).Assembly.GetName().Version);
    }
}

/* This example produces output similar to the following:
   The version of the currently executing assembly is: 1.1.0.0

当然这与助手类"公共静态类CoreAssembly"的答案非常相似,但是,如果你知道至少一种类型的执行程序集,那么创建一个不是必须的。帮助班,它可以节省您的时间。

答案 2 :(得分:18)

using System.Reflection;
{
    string version = Assembly.GetEntryAssembly().GetName().Version.ToString();
}

来自MSDN的评论http://msdn.microsoft.com/en-us/library/system.reflection.assembly.getentryassembly%28v=vs.110%29.aspx

从非托管应用程序加载托管程序集时,GetEntryAssembly方法可以返回null。例如,如果非托管应用程序创建用C#编写的COM组件的实例,则从C#组件调用GetEntryAssembly方法将返回null,因为该进程的入口点是非托管代码而非而不是托管程序集。

答案 3 :(得分:6)

这应该做:

Assembly assem = Assembly.GetExecutingAssembly();
AssemblyName aName = assem.GetName();
return aName.Version.ToString();

答案 4 :(得分:1)

我最终选择了typeof(MyClass).GetTypeInfo().Assembly.GetName().Version来获得netstandard1.6应用。所有其他提出的答案都提出了部分解决方案。这是唯一能让我得到我需要的东西。

来自地方的组合:

https://msdn.microsoft.com/en-us/library/x4cw969y(v=vs.110).aspx

https://msdn.microsoft.com/en-us/library/2exyydhb(v=vs.110).aspx

答案 5 :(得分:1)

如果您通过GitVersion或其他版本控制软件来使用版本控制,则首选

Product Version

要从您的类库中获取此信息,可以调用System.Diagnostics.FileVersionInfo.ProductVersion

using System.Diagnostics;
using System.Reflection;

//...

var assemblyLocation = Assembly.GetExecutingAssembly().Location;
var productVersion = FileVersionInfo.GetVersionInfo(assemblyLocation).ProductVersion

enter image description here