2010-12-18 27 views
1

在Windows Phone 7中,有沒有辦法在代碼中獲取應用程序構建或編譯日期? 爲了支持我的應用程序,我想顯示日期和版本號。WP7 - 從代碼獲取編譯/生成日期?

如果它不是立即可用,任何提示或替代? (我猜想有人將它設置爲應用程序設置,這很麻煩)。

+0

皮爾斯嗨,讓我們知道,如果什麼都需要回答的問題 – 2010-12-28 11:23:11

+0

米克:謝謝你的回答希望一個乾淨的解決方案可用,但我可以用這個工作。謝謝! – pearcewg 2010-12-31 22:00:05

回答

3

您可以從Assembly.GetExecutingAssembly().FullName分析版本號。

輸出是這種形式

PhoneApp的,版本= 1.0.0.0, 文化=中立,公鑰=空

構建日期似乎並不可用,可以說,如果你在每個版本中增加你的版本號,你將不需要它。如果它對您的應用程序很重要,那麼您可以將其存儲在其他地方。

+2

新版本(Assembly.GetExecutingAssembly()。FullName.Split('=')[1] .Split(',')[0]); – 2012-03-08 10:02:49

2

構建的日期(&時間)未包含在程序集中。
如果你可以到達手機上的文件系統,你可以從這個日期得到一個日期,但它可能會受到市場消化過程(當代碼簽名時)的影響,所以你可能無法保證這一點。

如果您使用*作爲版本號的構建部分,然後從中找出構建日期。 (這是自2000-01-01以來的天數)。

或者,您可以在構建過程中添加一些內容以設置屬性或設置。

或者,如果您的版本控制系統使用SVN,您可以在帶有SubWcRev.exe的模板中使用$WCDATE$進行設置。

或者,您可以通過使用T4將其添加到應用程序。

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

namespace MyNamespace 
{ 
    public partial class App : Application 
    { 
     public string BuildDate { get { return "<#= DateTime.Now #>"; } } 
    } 
} 
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"); 
} 


在TT文件應該做的伎倆以下在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; 
} 
1
  1. 添加文件BuildDate.txt
  2. 項目屬性>生成事件
  3. 預生成事件命令行:ECHO%DATE%%TIME%>「$(PROJECTDIR)\創建日期。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; 
    }