Как я могу программно получить текущую версию продукта на С#?
Мой код:
VersionNumber = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
Я получаю VersionNumber = 1.0.0.0, но текущая версия 1.0.0.12.
Как я могу программно получить текущую версию продукта на С#?
Мой код:
VersionNumber = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
Я получаю VersionNumber = 1.0.0.0, но текущая версия 1.0.0.12.
Я получил ответ на мой вопрос: просто дайте ссылку на 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();
}
}
Существуют три версии: сборка, файл и продукт. Чтобы получить версию продукта:
using System.Reflection;
using System.Diagnostics;
Assembly assembly = Assembly.GetExecutingAssembly();
FileVersionInfo fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location);
string version = fileVersionInfo.ProductVersion;
System.Reflection.Assembly.GetEntryAssembly().GetName().Version
Другой подход к получению версии продукта (которая указывается с помощью AssemblyInformationalVersionAttribute
)
private static string AssemblyProductVersion
{
get
{
object[] attributes = Assembly.GetExecutingAssembly()
.GetCustomAttributes(typeof(AssemblyInformationalVersionAttribute), false);
return attributes.Length == 0 ?
"" :
((AssemblyInformationalVersionAttribute)attributes[0]).InformationalVersion;
}
}
Все эти ответы задают сборку с .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();
}
}
Попробуйте следующее:
var thisApp = Assembly.GetExecutingAssembly();
AssemblyName name = new AssemblyName(thisApp.FullName);
VersionNumber = "v. " + name.Version;
Также см. эту статью MSDN о свойстве AssemblyName.Version
.
В С# вам нужно использовать отражение и диагностику
Assembly assembly = Assembly.GetExecutingAssembly();
FileVersionInfo fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location);
string version = fileVersionInfo.ProductVersion;
У меня была та же проблема, что и у большинства из вас. Он всегда будет показывать 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);