Как я могу получить версию исполняемой сборки?


Я пытаюсь получить исполняемую версию сборки в C# 3.0, используя следующий код:

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

есть другой правильный способ сделать это?

5 141

5 ответов:

два варианта... независимо от типа приложения вы всегда можете вызвать:

Assembly.GetExecutingAssembly().GetName().Version

если a 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 в моем коде по мере необходимости.

в MSDN, сборка.Способ GetExecutingAssembly, это замечание о методе "getexecutingassembly", что по соображениям производительности вы должны вызывать этот метод только тогда, когда вы не знаете во время разработки, какая сборка выполняется в настоящее время.

рекомендуемый способ извлечения объекта сборки, представляющего текущую сборку, заключается в использовании 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
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:

The GetEntryAssembly метод может возвратить null при загрузке управляемой сборки из неуправляемого приложения. Например, если неуправляемое приложение создает экземпляр COM-компонента, написанного на C#, вызов GetEntryAssembly метод из компонента C# возвращает null, потому что запись точкой для процесса был неуправляемый код, а не управляемая сборка.

Это:

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

Я, наконец, остановились на 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