Как получить версию приложения в Windows Phone? - PullRequest
23 голосов
/ 30 сентября 2010

В C # можно использовать System.Version.Assembly, чтобы получить версию работающего приложения.Однако этого не существует в Silverlight для Windows Phone.Есть ли альтернатива?

Ответы [ 11 ]

38 голосов
/ 01 октября 2010

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


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

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

19 голосов
/ 07 сентября 2014

Если вы перешли на Windows Phone 8, вы можете просто использовать более новый PackageId класс:

var version = Package.Current.Id.Version;
19 голосов
/ 03 апреля 2014

Я не знаю, как @henry принял ответ, потому что все ответы говорят о версии Dll, но когда речь идет о получении версии приложения для Windows Phone, что означает версию приложения на рынке.Я не знаю о других, но меня действительно не волнует версия dll, а также я использую рыночную версию для обозначения источника в системе контроля версий.

Когда разработчик загружает XAP на рынок, он / она указывает версию XAP, которая может отличаться от версии dll, а при обработке Market считывает информацию из файла WMAppManifest.xml и записывает обратно версию, указанную вСтраница отправки XAP.

Итак, желаемая версия доступна в файле WMappManifest.xml, который вы можете прочитать в XmlReader, как показано ниже;

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

Вот пример 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>

Таким образом, вы можете читать любую информацию из тега App xml так же, как мы читаем версию из тега app.например, идентификатор издателя или идентификатор продукта

10 голосов
/ 13 октября 2010

На телефоне 7 нет чистого способа получить версию. Лучше всего разобрать полное имя (которое является единственным доступным свойством) для строки версии:

String appVersion = System.Reflection.Assembly.GetExecutingAssembly()
                    .FullName.Split('=')[1].Split(',')[0];
5 голосов
/ 12 января 2012

Во-первых, я думаю, что более целесообразно использовать информацию о версии файла сборки для передачи версии приложения пользователю. Смотри http://techblog.ranjanbanerji.com/post/2008/06/26/Net-Assembly-Vs-File-Versions.aspx

Во-вторых, как насчет этого:

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);
    }
}
4 голосов
/ 30 апреля 2014

Чтобы получить версию приложения из "WMappManifest.xml", это решение может быть более эффективным, чем решение Mubashar Ahmad, но оно будет работать только для WP8 +, а не для 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;
}
2 голосов
/ 13 октября 2014
string versionApp = XDocument.Load("WMAppManifest.xml").Root.Element("App").Attribute("Version").Value;
1 голос
/ 26 августа 2015

Просто используйте эту строку, чтобы получить имя приложения и идентификатор, имя издателя и т. Д. *

string name = Windows.ApplicationModel.Package.Current.DisplayName;
1 голос
/ 17 марта 2015
public static string GetAsemblyVersion()
{
    return Convert.ToString(Assembly.GetCallingAssembly().GetName().Version);
}
1 голос
/ 04 декабря 2013
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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...