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