web-dev-qa-db-ja.com

Windows Phoneでアプリのバージョンを取得するにはどうすればよいですか?

C#では、System.Version.Assemblyを使用して、実行中のアプリのバージョンを取得できます。ただし、これはSilverlight for WindowsPhoneには存在しないようです。代替手段はありますか?

23
henry

すべての回答がDLLバージョンについて話しているので、@ henryが回答をどのように受け入れたかはわかりませんが、Windows Phoneアプリのバージョンを入手することについて話している場合、それは市場に出回っているアプリのバージョンを意味します。他の人のことは知りませんが、dllのバージョンは本当に気にしません。また、市場バージョンを使用して、ソース管理でソースにラベルを付けます。

開発者が市場にXAPをアップロードするとき、開発者はdllバージョンとは異なる可能性のあるXAPのバージョンを指定し、市場の処理中に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タグからバージョンを読み取るのと同じ方法で、Appxmlタグから必要な情報を読み取ることができます。例えば出版社IDまたは製品ID

19
Mubashar

GetExecutingAssemblyメソッドとAssemblyNameクラスを使用して、この情報を見つけることができます。


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

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

38
Walt Ritscher

Windows Phone 8に移行した場合は、 新しいPackageId クラスを使用できます。

var version = Package.Current.Id.Version;
19

電話7では、バージョンを取得するためのクリーンな方法はありません。最善の方法は、バージョン文字列のフルネーム(公開されている唯一のプロパティ)を解析することです。

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

まず、アプリケーションのバージョンをユーザーに伝えるために、アセンブリのファイルバージョン情報を使用する方が適切だと思います。 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ソリューションよりも効率的かもしれませんが、WP7ではなくWP8 +でのみ機能します。

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;
}
4
Cœur
string versionApp = XDocument.Load("WMAppManifest.xml").Root.Element("App").Attribute("Version").Value;
2

この行を使用して、アプリケーション名とID、発行者名などを取得します。

string name = Windows.ApplicationModel.Package.Current.DisplayName;
1
Zia Ur Rahman
public static string GetAsemblyVersion()
{
    return Convert.ToString(Assembly.GetCallingAssembly().GetName().Version);
}
1
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;
1

Windows Phone 8.1:

using System.Reflection;

// ...

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