Подтвердить что ты не робот

Как получить версию приложения в Windows Phone?

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

4b9b3361

Ответ 1

Я не понимаю, как @henry принял ответ, потому что все ответы говорят о версии Dll, но когда речь идет о получении версии приложения для Windows-телефона, это означает версию приложения на рынке. Я не знаю о других, но мне действительно не нужна версия 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, так же, как мы читаем версию из тега приложения. например идентификатор издателя или идентификатор продукта

Ответ 2

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


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

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

Ответ 3

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

var version = Package.Current.Id.Version;

Ответ 4

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

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

Ответ 5

Во-первых, я думаю, что более вероятно использовать информацию о версии файла сборки для передачи версии приложения пользователю. См. 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);
    }
}

Ответ 6

Чтобы получить версию приложения из "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;
}

Ответ 7

string versionApp = XDocument.Load("WMAppManifest.xml").Root.Element("App").Attribute("Version").Value;

Ответ 8

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;

Ответ 9

public static string GetAsemblyVersion()
{
    return Convert.ToString(Assembly.GetCallingAssembly().GetName().Version);
}

Ответ 10

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

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

Ответ 11

Windows Phone 8.1:

using System.Reflection;

// ...

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