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

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

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

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

Ответ 1

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

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 в своем коде.

Ответ 2

В 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

Конечно, это очень похоже на ответ со вспомогательным классом "public static class CoreAssembly", но если вы знаете хотя бы один тип исполняющей сборки, необязательно создавать вспомогательный класс, и это экономит ваше время.

Ответ 3

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, когда управляемая сборка была загружена из неуправляемого приложения. Например, если неуправляемое приложение создает экземпляр COM-компонента, написанного на С#, вызов метода GetEntryAssembly из компонента С# возвращает null, поскольку точкой входа для процесса был неуправляемый код, а не управляемая сборка.

Ответ 4

Это должно сделать:

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

Ответ 5

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

Ответ 6

Product Version может быть предпочтительнее, если вы используете управление версиями через GitVersion или другое программное обеспечение управления версиями.

Чтобы получить это из своей библиотеки классов, вы можете вызвать 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