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

Как получить текущую опубликованную версию в приложении .NET?

Я хочу иметь возможность отображать текущую версию приложения .NET, которую я развернул, используя мастер публикации. Существует хороший вариант автоматического обновления номера версии при каждом опубликовании моего приложения.

Я нашел еще один вопрос (Автоматически обновить номер версии), который имел бы это, чтобы получить текущую версию:

Assembly.GetExecutingAssembly().GetName().Version

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

4b9b3361

Ответ 1

В итоге я использовал этот небольшой код для получения текущей развернутой версии или если она не развернута в текущей версии сборки.

private Version GetRunningVersion()
{
  try
  {
    return Application.ApplicationDeployment.CurrentDeployment.CurrentVersion;
  }
  catch
  {
    return Assembly.GetExecutingAssembly().GetName().Version;
  }
}

Мне пришлось добавить ссылки на System.Deployment и System.Reflection.

Ответ 2

Вы можете использовать следующий тест

if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed) {
    return System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion;
}

чтобы избежать исключения (как описано в этот пост).

Кроме того, я не думаю, что вы можете получить текущую версию публикации с помощью отладки Visual Studio, потому что доступ к CurrentDeployment будет генерировать InvalidDeploymentException.

Ответ 3

Я использовал следующее решение для этой проблемы, и оно работает для меня:

DataSet ds = new DataSet();
ds.ReadXml(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "MyProd.application"));
DataTable dt = new DataTable();
if (ds.Tables.Count > 1) {
    dt = ds.Tables[1];
    MessageBox.Show(dt.Rows[0]["version"].ToString());
}

Ответ 4

Основываясь на ответе от Jason, я закончил с этим:

Добавить ссылку на System.Deployment.

string versionDeploy = Application.ProductVersion;              
if (System.Diagnostics.Debugger.IsAttached)
{
    this.lblVersion.Caption = string.Format("Versión {0} DESA", versionDeploy);
}
else
{
    if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed)
    {
        Version Deploy = System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion;
        versionDeploy = string.Format("{0}.{1}.{2}.{3}", Deploy.Major, Deploy.Minor, Deploy.Build, Deploy.Revision);
    }
    this.lblVersion.Caption = string.Format("Versión {0} PROD", versionDeploy);
}

Надеюсь, что это поможет.

Ответ 5

Imports System.Configuration
Public Function GetAppVersion() As String
    Dim ass As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
    Dim ver As System.Version = ass.GetName().Version
    Return ver.Major & "." & ver.Minor & "." & ver.Revision
End Function