简体   繁体   中英

How to get app version in Windows Phone?

In C# one can use System.Version.Assembly to get the version of a running app. However this doesn't appear to exist in Silverlight for Windows Phone. Is there an alternative?

You can use the GetExecutingAssembly method and the AssemblyName class to find this information.


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

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

I don't how @henry accepted the answer because all answers are talking about Dll version but when one is talking about getting the version of windows phone app that means version of app on the market. I don't know about others but I really don't care about the version of dll and also I use market version to label the source in source control.

When a developer upload XAP on the market he/she specifies the version of XAP which can be different then the dll version, while processing Market reads information from WMAppManifest.xml file and write backs the version you specify on the XAP submission page.

So the desired version is available in WMappManifest.xml file which you can read by XmlReader like following;

    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");
        }
    }

Here is sample 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 you can read whatever information you want from App xml tag the same way as we read version from app tag. eg publisher Id or Product Id

如果您已移至Windows Phone 8,则只需使用较新的PackageId类:

var version = Package.Current.Id.Version;

On Phone 7 there is no clean way to get the version. The best thing to do is parse the Full Name (which is the only exposed property) for the version string:

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

First, I think it's more apt to use the assembly's file version info for conveying the application version to the user. See http://techblog.ranjanbanerji.com/post/2008/06/26/Net-Assembly-Vs-File-Versions.aspx

Second, what about doing this:

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);
    }
}

To get App Version from "WMappManifest.xml", this solution might be more efficient than Mubashar Ahmad solution, but it will only work for WP8+, not 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;
}
string versionApp = XDocument.Load("WMAppManifest.xml").Root.Element("App").Attribute("Version").Value;
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;
public static string GetAsemblyVersion()
{
    return Convert.ToString(Assembly.GetCallingAssembly().GetName().Version);
}

只需使用此行来获取应用程序名称和ID,发布者名称等...

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

Windows Phone 8.1:

using System.Reflection;

// ...

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM