Как получить текущую версию продукта в C #? - PullRequest
50 голосов
/ 27 июня 2011

Как программно получить текущую версию продукта в C #?

Мой код:

VersionNumber = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();

Я получаю VersionNumber = 1.0.0.0, но текущая версия - 1.0.0.12.

Ответы [ 8 ]

68 голосов
/ 12 сентября 2011

Существует три версии: сборка, файл и продукт.Чтобы получить версию продукта:

using System.Reflection;
using System.Diagnostics;
Assembly assembly = Assembly.GetExecutingAssembly();
FileVersionInfo fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location);
string version = fileVersionInfo.ProductVersion;
27 голосов
/ 28 июня 2011

Я получил ответ на мой вопрос: просто дайте ссылку на System.Deployment.Application, и хотя он не будет работать при разработке Visual Studio, но он будет работать после развертывания приложения.

//using System.Deployment.Application;
//using System.Reflection;
public string CurrentVersion
{
    get
    {
        return ApplicationDeployment.IsNetworkDeployed
               ? ApplicationDeployment.CurrentDeployment.CurrentVersion.ToString()
               : Assembly.GetExecutingAssembly().GetName().Version.ToString();
    }
} 
16 голосов
/ 18 июня 2016
System.Reflection.Assembly.GetEntryAssembly().GetName().Version
6 голосов
/ 15 ноября 2011

Другой подход к получению версии продукта (который указывается с помощью AssemblyInformationalVersionAttribute) -

private static string AssemblyProductVersion
{
    get
    {
        object[] attributes = Assembly.GetExecutingAssembly()
            .GetCustomAttributes(typeof(AssemblyInformationalVersionAttribute), false);
        return attributes.Length == 0 ?
            "" :
            ((AssemblyInformationalVersionAttribute)attributes[0]).InformationalVersion;
    }
}
3 голосов
/ 29 октября 2015

Все эти ответы просят для сборки с .GetExecutingAssembly().
Если у вас есть этот код в DLL, он вернет номер версии DLL.

Поменяйте местами этот вызов на GetCallingAssembly(), чтобы получить место в вашем коде, которое вы хотите знать.

/// <summary>
/// Returns version like 2.1.15
/// </summary>
public static String ProductVersion
{
    get
    {
        return new Version(FileVersionInfo.GetVersionInfo(Assembly.GetCallingAssembly().Location).ProductVersion).ToString();
    }
}
2 голосов
/ 31 июля 2014

В C # нужно использовать рефлексию и диагностику

Assembly assembly = Assembly.GetExecutingAssembly();
FileVersionInfo fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location);
string version = fileVersionInfo.ProductVersion;
2 голосов
/ 27 июня 2011

Попробуйте:

var thisApp = Assembly.GetExecutingAssembly();
AssemblyName name = new AssemblyName(thisApp.FullName);
VersionNumber = "v. " + name.Version;

Также см. эту статью MSDN о свойстве AssemblyName.Version.

0 голосов
/ 01 августа 2018

У меня была та же проблема, что и у большинства из вас.Он всегда будет показывать 1.0.0.0, если вы не вошли вручную и не обновили файл assemblyInfo.cs до версии, которую вы хотели отобразить.Я думаю, что мы хотели показать номер версии редакции в свойствах проекта, но это, кажется, не вариант (из того, что я читал).

Я не уверен, что когда-то, когда были сделаны эти комментарии, это существовало, но теперь в assemblyinfo.cs есть способ сделать это автоматически.Мне тоже не нравилось обновлять их вручную при каждой публикации.

// You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.*")]

Это * автоматически увеличивается с каждой публикацией.Он не будет таким же, как номер публикации, который вы видите в свойствах проекта, но он определенно увеличивается и, безусловно, лучше, чем делать это вручную.

Затем у вас есть несколько вариантов отображения, как указано выше.Я лично использовал это, которое я нашел на другом сайте

Version version = Assembly.GetExecutingAssembly().GetName().Version; lblRevision.Text = String.Format("{0}.{1}.{2}.{3}", version.Major, version.Minor, version.Build, version.Revision);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...