【问题标题】:How to get app version in Windows Phone?如何在 Windows Phone 中获取应用程序版本?
【发布时间】:2010-09-30 17:50:35
【问题描述】:

在 C# 中,可以使用 System.Version.Assembly 来获取正在运行的应用程序的版本。但是,这在 Silverlight for Windows Phone 中似乎不存在。有其他选择吗?

【问题讨论】:

  • @AnthonyWJones 好的,现在我明白你的评论了。你是说亨利没有接受他提出的问题的答案。
  • 我认为一些新手不知道他们可以接受正确的答案...
  • 答案适用于silverlight,但不适用于未公开版本的Windows Phone。相反,解决方案是: String appVersion = System.Reflection.Assembly.GetExecutingAssembly().FullName.Split('=')[1].Split(',')[0];

标签: c# silverlight windows-phone-7


【解决方案1】:

如果您已迁移到 Windows Phone 8,则可以简单地使用 newer PackageId 类:

var version = Package.Current.Id.Version;

【讨论】:

  • 简单有效..Thnx
【解决方案2】:

您可以使用 GetExecutingAssembly 方法和 AssemblyName 类来查找此信息。


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

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

【讨论】:

  • 会带来我们在市场上上传xap时设置的版本吗?
【解决方案3】:

我不知道@henry 如何接受答案,因为所有答案都在谈论 Dll 版本,但是当有人谈论获取 Windows Phone 应用程序的版本时,这意味着市场上的应用程序版本。我不知道其他人,但我真的不关心 dll 的版本,而且我使用市场版本来标记源代码管理中的源代码。

当开发者在市场上上传 XAP 时,他/她指定 XAP 的版本可以与 dll 版本不同,同时处理市场从 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 标签中读取版本一样。例如发布商 ID 或产品 ID

【讨论】:

  • 为什么不使用Package 类作为Magnus's answer below
  • @JamieKitson:问题是针对 windows-phone-7 的,当时人们考虑支持这两个平台
【解决方案4】:

在 Phone 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;
      }
      

      【讨论】:

      • 我忍不住了,我使用Stopwatch 将您的解决方案与 Mubashar Ahmad 进行了比较,我发现您的解决方案在经过的滴答数中不到一半 :)
      • 可能只是巧合,但我每天都会减少代码行数。
      • @JesperRiemerAndersen 同时,随着时间的推移,我进一步改进了我的代码。我刚刚进行了编辑以反映我最新的优化。是的,我确实使用 Stopwatch 比较了这个文件的 4 种不同的 xml 解析。
      【解决方案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】:

            只需使用这一行来获取应用程序名称和 ID、发布者名称等...

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

            【讨论】:

              【解决方案11】:

              Windows Phone 8.1:

              using System.Reflection;
              
              // ...
              
              Version version = typeof(MainPage).GetTypeInfo().Assembly.GetName().Version;
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2012-05-25
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多