Ответы:
Два варианта ... независимо от типа приложения вы всегда можете вызвать:
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
в своем коде по мере необходимости.
ClickOnce
версию, упомянутую @Justin, она указывается на Publish
вкладке в свойствах проекта (т. Е. Не относится к AssemblyVersion или AssemblyFileVersion).
HomeController
, так в Razor:v@(Assembly.GetAssembly(typeof(MyWebProject.Mvc.Controllers.HomeController)).GetName().Version.ToString(2))
В MSDN метод Assembly.GetExecutingAssembly - это замечание о методе "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», но, если вы знаете хотя бы один тип выполняемой сборки, создание вспомогательного класса не обязательно, и это экономит ваше время.
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-компонента, написанного на C #, GetEntryAssembly
возвращается вызов метода из компонента C # null
, поскольку точкой входа для процесса был неуправляемый код, а не управляемая сборка.
GetEntryAssembly
(vs GetCallingAssembly
или GetExecutingAssembly
), кажется, единственное, что работает, когда вызывается из справочной библиотеки.
Это должно сделать:
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
Product Version
может быть предпочтительным, если вы используете управление версиями через GitVersion или другое программное обеспечение управления версиями.
Чтобы получить это из вашей библиотеки классов, вы можете позвонить System.Diagnostics.FileVersionInfo.ProductVersion
:
using System.Diagnostics;
using System.Reflection;
//...
var assemblyLocation = Assembly.GetExecutingAssembly().Location;
var productVersion = FileVersionInfo.GetVersionInfo(assemblyLocation).ProductVersion
System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion