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

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

 henry13 окт. 2010 г., 21:20
Ответ работает для silverlight, но не работает на Windows Phone, где версия не отображается. Вместо этого решение является следующим: String appVersion = System.Reflection.Assembly.GetExecutingAssembly (). FullName.Split ('=') [1] .Split (',') [0];
 AnthonyWJones30 сент. 2010 г., 21:13
Время принять некоторые ответы?
 John Gardner01 окт. 2010 г., 18:32
Я думаю, что некоторые новички не понимают, что они могут принять ответ как правильный ...
 Walt Ritscher01 окт. 2010 г., 04:17
@AnthonyWJones Хорошо, теперь я понимаю ваш комментарий. Вы говорите, что Генри не принял ответ на вопросы, которые он задает.

Ответы на вопрос(11)

Решение Вопроса

как @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. например Идентификатор издателя или Идентификатор продукта

 Jamie Kitson12 сент. 2015 г., 00:25
Почему бы не использоватьPackage класс какОтвет Магнуса ниже?
 Mubashar14 сент. 2015 г., 02:40
@JamieKitson: вопрос был для windows-phone-7, и это было время, когда люди думали о поддержке обеих платформ

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

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;
}
 Jesper Riemer Andersen27 авг. 2014 г., 12:52
Может быть, это было случайно, но я буду брать меньше строк кода в любой день.
 Cœur27 авг. 2014 г., 13:52
@JesperRiemerAndersen Тем временем я еще больше улучшил свой код. Я только что внес изменения, чтобы отразить мою последнюю оптимизацию. Да, я использовал секундомер, чтобы сравнить более 4 различных XML-разборов этого файла.
 Jesper Riemer Andersen27 авг. 2014 г., 12:43
я не мог с собой поделать, я сравнил ваше решение с Мубашаром Ахмадом, используяStopwatch, и я обнаружил, что ваше решение сделало это менее чем за половину пройденного времени :)

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

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

вы можете просто использоватьболее новый PackageId учебный класс:

var version = Package.Current.Id.Version;
 Jamie Kitson12 сент. 2015 г., 00:27
Почему это не принятый ответ?
 Kartiikeya25 нояб. 2015 г., 10:59
просто и эффективно
string versionApp = XDocument.Load("WMAppManifest.xml").Root.Element("App").Attribute("Version").Value;

ть полное имя (которое является единственным доступным свойством) для строки версии:

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

Windows Phone 8.1:


// ...

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

чтобы найти эту информацию.

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

  var version = nameHelper.Version;
  var full = nameHelper.FullName;
  var name = nameHelper.Name;
 Mubashar03 апр. 2014 г., 14:16
Принесет ли он версию, которую мы установили при загрузке xap в маркете?
public static string GetAsemblyVersion()
{
    return Convert.ToString(Assembly.GetCallingAssembly().GetName().Version);
}
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;

Ваш ответ на вопрос