2011-06-27 13 views
47

Jak programowo uzyskać aktualną wersję produktu w języku C#?Jak uzyskać aktualną wersję produktu w języku C#?

Mój kod:

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

jestem coraz numer_wersji = 1.0.0.0, ale obecna wersja 1.0.0.12.

+1

Sprawdź co jest to powrót w 'System.Reflection.Assembly.GetExecutingAssembly(). GetName()' –

+0

Również szukasz wersji montażowej lub są rzeczywiście szuka ClickOnce aplikacji wersji ? –

+1

"aktualna wersja to 1.0.0.12" - gdzie ustawić? Co widzisz dla wersji pliku w eksploratorze (widok kafelków lub właściwości, wersja) – Rup

Odpowiedz

26

Dostałem odpowiedź na moje pytanie to Wystarczy podać odniesienie do System.Deployment.Application i choć nie będzie działać w rozwoju visual studio, ale będzie działać, gdy aplikacja zostanie wdrożona.

//using System.Deployment.Application; 
    //using System.Reflection; 
    public string CurrentVersion 
    { 
     get 
     { 
      return ApplicationDeployment.IsNetworkDeployed 
        ? ApplicationDeployment.CurrentDeployment.CurrentVersion.ToString() 
        : Assembly.GetExecutingAssembly().GetName().Version.ToString(); 
     } 
    }  
3

Spróbuj tego:

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

również zobaczyć this MSDN artykuł na nieruchomości AssemblyName.Version.

+0

its still 1.0.0.0 –

+0

CZY to jest wersja złożenia lub assemblyFileVersion? –

+0

kod, na który odpowiedziałeś. Właściwie to potrzebuję aktualnej wersji aplikacji, którą budujemy. Jak mogę to zdobyć? To samo, co mamy we właściwościach rozwiązania. –

57

Dostępne są trzy wersje: zespół, plik i produkt. Aby uzyskać wersję produktu:

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

Całkiem niedorzeczne, że dwa ustawienia wersji, które są ściśle powiązane ze sobą we właściwościach projektu, nie są wewnętrznie wewnętrzną klasą. Heck, nawet właściwości w dwóch klasach nie są takie same; ostatnia część jest nazywana "wersją" w wersji złożonej, ale jako "prywatna" w wersji pliku. – Nyerguds

5

Innym podejściem do uzyskania wersję produktu (który jest określony za pomocą AssemblyInformationalVersionAttribute) jest

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

Jest to lepsze rozwiązanie w sytuacji, gdy dostęp do systemu plików jest niedostępny (np. SqlClr). – rrreee

2

W języku C# trzeba użyć refleksji i diagnostyka

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

To nie działa, jeśli masz wdrożoną wersję sieci lub inny projekt jako projekt rozruchowy. –

3

Wszystkie te odpowiedzi wymagają zestawu z .GetExecutingAssembly().
Jeśli masz ten kod w bibliotece dll, zwróci on numer wersji biblioteki DLL.

Zamień to połączenie na GetCallingAssembly(), aby uzyskać miejsce w kodzie, które chcesz poznać.

/// <summary> 
/// Returns version like 2.1.15 
/// </summary> 
public static String ProductVersion 
{ 
    get 
    { 
     return new Version(FileVersionInfo.GetVersionInfo(Assembly.GetCallingAssembly().Location).ProductVersion).ToString(); 
    } 
} 
10
System.Reflection.Assembly.GetEntryAssembly().GetName().Version 
+0

powinien być komentarzem. –

+0

GetEntryAssembly to kluczowy punkt, aby uruchomić działającą aplikację, nawet jeśli kod znajduje się w zespole DLL –

Powiązane problemy