2010-09-30 10 views
22

In C# kann man System.Version.Assembly verwenden, um die Version einer laufenden App zu erhalten. In Silverlight für Windows Phone scheint dies jedoch nicht zu existieren. Gibt es eine Alternative?Wie bekomme ich die App-Version in Windows Phone?

+1

Zeit, um einige Antworten zu akzeptieren? – AnthonyWJones

+0

@AnthonyWJones OK, jetzt verstehe ich Ihren Kommentar. Du sagst, Henry hat keine Antwort auf die Fragen akzeptiert, die er stellt. –

+0

Ich denke, dass einige Neulinge nicht herausfinden, dass sie eine Antwort als richtig akzeptieren können ... –

Antwort

19

Ich weiß nicht, wie @henry die Antwort akzeptiert, weil alle Antworten zu DLL-Version sprechen, aber wenn man spricht über die Version bekommen von Windows Phone App, die Version der App auf dem Markt bedeutet. Ich weiß nicht über andere, aber ich interessiere mich nicht wirklich für die Version von DLL und verwende auch Marktversion, um die Quelle in der Quellcodeverwaltung zu kennzeichnen.

Wenn ein Entwickler XAP auf den Markt hochlädt, gibt er die Version von XAP an, die sich von der DLL-Version unterscheiden kann. Bei der Verarbeitung liest Market die Informationen aus der Datei WMAppManifest.xml und schreibt die von Ihnen angegebene Version auf die XAP-Vorlage Seite.

So die gewünschte Version ist in WMappManifest.xml-Datei verfügbar, die Sie von XmlReader wie folgt lesen können;

public static string GetAppVersion() 
    { 
     var xmlReaderSettings = new XmlReaderSettings 
     { 
      XmlResolver = new XmlXapResolver() 
     }; 

     using (var xmlReader = XmlReader.Create("WMAppManifest.xml", xmlReaderSettings)) 
     { 
      xmlReader.ReadToDescendant("App"); 

      return xmlReader.GetAttribute("Version"); 
     } 
    } 

Hier Probe WMAppManifest.xml

<Deployment xmlns="http://schemas.microsoft.com/windowsphone/2012/deployment" AppPlatformVersion="8.0"> 
    <DefaultLanguage xmlns="" code="en-US"/> 
    <App xmlns="" ProductID="{cc18507d-0de0-42d6-8b0f-05addeafd21e}" Title="CaledosLab.Phone.ContosoLogTest" RuntimeType="Silverlight" Version="1.0.0.0" Genre="apps.normal" Author="CaledosLab.Phone.ContosoLogTest author" Description="Sample description" Publisher="CaledosLab.Phone.ContosoLogTest" PublisherID="{a204adfc-7718-4c4a-afb4-c1c39ec50d30}"> 
    </App> 
</Deployment> 

So können Sie lesen, was Informationen Sie aus dem App-XML-Tag wollen die gleiche Art und Weise, wie wir Version von App-Tag lesen. z.B. Publisher-ID oder Produkt-ID

+1

Warum nicht die 'Package' Klasse als [Magnus Antwort unten] (http://stackoverflow.com/questions/3833354/how-to-get-app-version-in-windows-phone#25714161) verwenden? –

+0

@JamieKitson: Frage war für Windows-Phone-7 und es war die Zeit, wenn die Leute die Unterstützung beider Plattformen in Erwägung ziehen –

38

Sie können die GetExecutingAssembly-Methode und die AssemblyName-Klasse verwenden, um diese Informationen zu finden.


var nameHelper = new AssemblyName(Assembly.GetExecutingAssembly().FullName); 

    var version = nameHelper.Version; 
    var full = nameHelper.FullName; 
    var name = nameHelper.Name; 

+0

Wird es die Version bringen, die wir beim Hochladen des xap im Markt eingestellt haben? –

10

Auf Phone 7 gibt es keine saubere Möglichkeit, die Version zu bekommen. Das Beste, was zu tun ist, den vollständigen Namen analysiert für die Versionszeichenfolge (das nur ausgesetzte Eigenschaft ist):

String appVersion = System.Reflection.Assembly.GetExecutingAssembly() 
        .FullName.Split('=')[1].Split(',')[0]; 
5

Erstens, ich denke, es ist mehr apt ist die Dateiversion Info Montag zu verwenden zum Fördern der Anwendungsversion der Benutzer. Siehe http://techblog.ranjanbanerji.com/post/2008/06/26/Net-Assembly-Vs-File-Versions.aspx

Zweitens, was dies zu tun:

using System; 
using System.Linq; 
using System.Reflection; 

public static class AssemblyExtensions 
{ 
    public static Version GetFileVersion(this Assembly assembly) 
    { 
     var versionString = assembly.GetCustomAttributes(false) 
      .OfType<AssemblyFileVersionAttribute>() 
      .First() 
      .Version; 

     return Version.Parse(versionString); 
    } 
} 
1
System.Text.RegularExpressions.Regex regexVersion = new System.Text.RegularExpressions.Regex(@".*(?<v>\d+.\d+.\d+.\d+).*"); 
System.Text.RegularExpressions.Match regexVersion_Match = regexVersion.Match(System.Reflection.Assembly.GetExecutingAssembly().FullName); 
string appVersion = ""; 
if (regexVersion_Match.Success) 
    appVersion = regexVersion_Match.Groups["v"].Value; 
3

Um App-Version von "WMappManifest.xml" zu erhalten, diese Lösung könnte effizienter sein als Mubashar Ahmad Lösung, aber es wird nur für WP8 + arbeitet, nicht WP7:

using (var stream = new FileStream("WMAppManifest.xml", FileMode.Open, FileAccess.Read)) 
{ 
    var appVersion = XElement.Load(stream).Element("App").Attribute("Version"); 
    return appVersion != null ? appVersion.Value : null; 
} 
+1

Ich konnte mir nicht helfen, ich verglich Ihre Lösung mit Mubashar Ahmad mit einer 'Stoppuhr', und ich fand das Ihre Lösung hat es in weniger als der Hälfte der verstrichenen Ticks geschafft :) –

+0

Konnte nur zufällig gewesen sein, aber ich werde jeden Tag weniger Zeilen Code nehmen. –

+1

@JesperRiemerAndersen In der Zwischenzeit habe ich meinen Code im Laufe der Zeit weiter verbessert. Ich habe gerade einen Schnitt gemacht, um meine neueste Optimierung widerzuspiegeln. Ja, ich habe mit Stopwatch über 4 verschiedene XML-Parsing dieser Datei verglichen. –

18

Wenn Sie haben 8 zu Windows Phone bewegt über, können Sie einfach die newer PackageId Klasse verwenden:

var version = Package.Current.Id.Version; 
+0

Warum ist das nicht die akzeptierte Antwort? –

+0

einfach und effektiv..Thnx –

2
string versionApp = XDocument.Load("WMAppManifest.xml").Root.Element("App").Attribute("Version").Value; 
1
public static string GetAsemblyVersion() 
{ 
    return Convert.ToString(Assembly.GetCallingAssembly().GetName().Version); 
} 
1

einfach u se diese Linie den Application Name und Id zu erhalten, Verleger Name etc ...

string name = Windows.ApplicationModel.Package.Current.DisplayName; 
0

Windows Phone 8.1:

using System.Reflection; 

// ... 

Version version = typeof(MainPage).GetTypeInfo().Assembly.GetName().Version; 
Verwandte Themen