如何在Windows Phone中获取应用程序版本?
在C#中,可以使用System.Version.Assembly来获取正在运行的应用程序的版本。 但是,这似乎并不存在于Silverlight for Windows Phone中。 还有其他选择吗?
我不知道@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示例
所以你可以从app xml标签中读取你想要的任何信息,就像我们从app tag中读取版本一样。 例如发布商ID或产品ID
您可以使用GetExecutingAssembly方法和AssemblyName类来查找此信息。
var nameHelper = new AssemblyName(Assembly.GetExecutingAssembly().FullName); var version = nameHelper.Version; var full = nameHelper.FullName; var name = nameHelper.Name;
如果您已移至Windows Phone 8,则只需使用较新的PackageId类:
var version = Package.Current.Id.Version;
在Phone 7上,没有干净的方式来获取版本。 最好的办法是解析版本字符串的全名(这是唯一公开的属性):
String appVersion = System.Reflection.Assembly.GetExecutingAssembly() .FullName.Split('=')[1].Split(',')[0];
首先,我认为使用程序集的文件版本信息更容易将应用程序版本传递给用户。 见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() .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; }
string versionApp = XDocument.Load("WMAppManifest.xml").Root.Element("App").Attribute("Version").Value;
System.Text.RegularExpressions.Regex regexVersion = new System.Text.RegularExpressions.Regex(@".*(?\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;