WP7 - 从代码获取编译/构建日期?

时间:2010-12-18 15:15:27

标签: windows-phone-7

在Windows Phone 7中,有没有办法在代码中构建应用程序或编译日期? 我想显示日期以及版本号,以便为我的应用程序提供支持。

如果没有立即可用,任何提示或替代方案? (我猜一个是设置应用程序设置,这很好。)

4 个答案:

答案 0 :(得分:3)

您可以解析Assembly.GetExecutingAssembly().FullName之外的版本号。

输出为此格式

  

PhoneApp,版本= 1.0.0.0,   Culture = neutral,PublicKeyToken = null

构建日期似乎不可用,并且可以说如果您在每个版本中增加版本号,则不需要它。如果对您的应用程序很重要,您可以将其存储在其他地方。

答案 1 :(得分:2)

构建的日期(和时间)不包含在程序集中 如果您可以通过电话访问文件系统,您可以从中获取日期,但可能会受到市场摄取过程的影响(代码签名时),因此您可能无法保证这一点。 / p>

如果您使用*作为版本号的构建部分,然后从中计算出构建日期。 (这是自2000-01-01以来的天数。)

或者,您可以在构建过程中添加一些内容来设置属性或设置。

或者,如果您的版本控制系统使用SVN,则可以在带有SubWcRev.exe的模板中使用$WCDATE$进行设置。

或者,您可以通过使用T4将其添加到应用程序 TT文件中的以下内容应该可以解决问题:

<#@ template language="C#" #>
<#@ import namespace="System" #>
using System.Windows;

namespace MyNamespace
{
    public partial class App : Application
    {
        public string BuildDate { get { return "<#= DateTime.Now #>"; } }
    }
}

答案 2 :(得分:1)

在Windows Phone 7+上获取应用版本:https://stackoverflow.com/a/22838743/1033581

这是WP7代码:

var xmlReaderSettings = new XmlReaderSettings
{
    XmlResolver = new XmlXapResolver()
};
using (var xmlReader = XmlReader.Create("WMAppManifest.xml", xmlReaderSettings))
{
    xmlReader.ReadToDescendant("App");
    return xmlReader.GetAttribute("Version");
}

在Windows Phone 8+上获取应用版本:https://stackoverflow.com/a/23387825/1033581

这是WP8代码:

using (var stream = new FileStream("WMAppManifest.xml", FileMode.Open, FileAccess.Read))
{
    var appVersion = XElement.Load(stream).Descendants("App").FirstOrDefault().Attribute("Version");
    return appVersion != null ? appVersion.Value : null;
}

答案 3 :(得分:1)

  1. 添加文件BuildDate.txt
  2. 项目属性&gt;建立活动
  3. 预构建事件命令行:echo%date %% time%&gt; “$(PROJECTDIR)\ BuildDate.txt”
  4. 添加代码:

    private static DateTime UpdatedAt()
    {
        var streamResourceInfo = Application.GetResourceStream(new Uri("BuildDate.txt", UriKind.Relative));
        var reader = new StreamReader(streamResourceInfo.Stream);
        string text = reader.ReadToEnd();
    
        var substring = text.Substring(0, text.Length - 6); // text = "11.05.2014 20:44:52,07 \n\r"
        var exact = DateTime.ParseExact(substring, "dd.MM.yyyy HH:mm:ss", CultureInfo.InvariantCulture);
        return exact;
    }