2016-09-27 4 views
5

Я хотел бы показать опубликованную версию моего настольного приложения. Я пытаюсь сделать это с помощью этого кода:как получить версию публикации?

_appVersion.Content = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; 

Проблема заключается в том, что я не получаю именно публиковать версию у меня в свойствах проекта. Ниже приведен скриншот из него:

enter image description here

Но я получаю 3.0.0.12546. Кто-нибудь знает, где проблема?

+0

Вы проверяете режим отладки? – Sajeetharan

+0

Nop, в режиме выпуска – IrApp

ответ

5

Я также с этим вопросом и обнаружил, что номер версии установлен в AssemblyInfo.cs вмешивался с установленным в Properties:

[assembly: AssemblyVersion("1.0.0.0")] 
[assembly: AssemblyFileVersion("1.0.0.0")] 

Я обычно комментировать эти строки из AssemblyInfo и заменить их с

[assembly: AssemblyVersion("1.0.*")] 

Проверьте, были ли эти значения жесткими в ваш файл AssemblyInfo.

См. this SO question для интересного обсуждения вопросов автоматического управления версиями. При проверке AssemblyInfo.cs убедитесь, что ваш автоинкремент (* - если вы используете его) нацелен только на цели AssemblyVersion, а не AssemblyFileVersion.


При отладке программы, вы можете проверить свойство сборки в

\bin\Release\app.publish 

На вкладке Details, проверьте номер версии. Согласуется ли это с любыми параметрами, указанными в VS?

+1

Идеально, ваше решение работает как шарм, спасибо большое! – IrApp

+0

@IrApp Без проблем, рад, что я мог бы помочь! – Bassie

2

Мы можем создать одно свойство, которое вернет информацию о версии , как указано ниже, и мы можем использовать это свойство.

public string VersionLabel 
{ 
    get 
    { 
     if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed) 
     { 
      Version ver = System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion; 
      return string.Format("Product Name: {4}, Version: {0}.{1}.{2}.{3}", ver.Major, ver.Minor, ver.Build, ver.Revision, Assembly.GetEntryAssembly().GetName().Name); 
     } 
     else 
     { 
      var ver = Assembly.GetExecutingAssembly().GetName().Version; 
      return string.Format("Product Name: {4}, Version: {0}.{1}.{2}.{3}", ver.Major, ver.Minor, ver.Build, ver.Revision, Assembly.GetEntryAssembly().GetName().Name); 
     } 
    } 
} 
0
System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; 

поможет вам версию сборки, которые существуют в файле AssemblyInfo.cs, чтобы получить публикацию версии, которые вы установили в диалоговом окне публикации, вы должны использовать

System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion 

Но обратите внимание, что у вас есть чтобы добавить ссылку на System.Deployment, и он будет работать только после публикации вашего приложения, щелкнув правой кнопкой мыши файл проекта и щелкнув публикацию, каждый раз, когда вы публикуете, он увеличит версию.

Если вы пытались вызвать указанную выше строку в режиме отладки он не будет работать и будет бросать исключение, так что вы можете использовать следующий код:

try 
{ 
    return System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion; 
} 
catch(Exception ex) 
{ 
    return Assembly.GetExecutingAssembly().GetName().Version; 
} 
0

Использование C# 6.0 с лямбда-выражения

private string GetVersion => ApplicationDeployment.IsNetworkDeployed ? $"Version: {ApplicationDeployment.CurrentDeployment.CurrentVersion}" : $"Version: {Application.ProductVersion}"; 
Смежные вопросы