Подтвердить что ты не робот

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

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

Мой код:

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

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

4b9b3361

Ответ 1

Я получил ответ на мой вопрос: просто дайте ссылку на 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();
    }
} 

Ответ 2

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

using System.Reflection;
using System.Diagnostics;
Assembly assembly = Assembly.GetExecutingAssembly();
FileVersionInfo fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location);
string version = fileVersionInfo.ProductVersion;

Ответ 3

System.Reflection.Assembly.GetEntryAssembly().GetName().Version

Ответ 4

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

private static string AssemblyProductVersion
{
    get
    {
        object[] attributes = Assembly.GetExecutingAssembly()
            .GetCustomAttributes(typeof(AssemblyInformationalVersionAttribute), false);
        return attributes.Length == 0 ?
            "" :
            ((AssemblyInformationalVersionAttribute)attributes[0]).InformationalVersion;
    }
}

Ответ 5

Все эти ответы задают сборку с .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();
    }
}

Ответ 6

Попробуйте следующее:

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

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

Ответ 7

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

Assembly assembly = Assembly.GetExecutingAssembly();
FileVersionInfo fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location);
string version = fileVersionInfo.ProductVersion;

Ответ 8

У меня была та же проблема, что и у большинства из вас. Он всегда будет показывать 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);