2010-11-11 37 views
12

版本在我的C#應用​​程序我通常得到的版本(對客戶) ,而電話崩潰對於MS來說是不可能的)。獲得大會上Windows Phone 7的

那麼,我如何獲得在Windows Phone 7設備上執行的版本?

[更新]如下面的註釋中所述,在wp7應用程序中調用GetName()似乎是問題所在。

+0

我一定會向微軟報告。你的代碼是正確的,掛起肯定是由模擬器中的.NET中的錯誤引起的,或者是在WP7的整個.NET中造成的! – 2010-11-11 09:50:52

回答

22

試試這個:

private static string GetVersionNumber() 
    { 
     var asm = Assembly.GetExecutingAssembly(); 
     var parts = asm.FullName.Split(','); 
     return parts[1].Split('=')[1]; 
    } 
+0

/highfive Matt :) – 2010-11-11 10:10:09

+0

好吧,這和我上面寫的基本一樣,它掛着手機就像我的版本一樣。 – Sam 2010-11-11 10:37:02

+1

@Sam這是在我的市場應用程序中工作。我不得不從FullName解析版本號,因爲'Version'不適合我。你遇到了什麼錯誤? – 2010-11-11 10:43:48

2

是否解析出來

Assembly.GetExecutingAssembly()。全​​名

對你的工作?

輸出示例:SomeApp,版本= 1.0.0.0,文化=中立,公鑰=空

編輯:不需要經過ManifestModule

+0

我甚至沒有那麼遠:似乎使用反射殺死了手機。 – Sam 2010-11-11 10:37:25

+0

測試三星泰勒原型設備System.Diagnostics.Debug.WriteLine(Assembly.GetExecutingAssembly()。FullName); ...沒有probs。 – 2010-11-11 10:48:27

+0

是的,你是對的,我錯誤地使用GetName而不是FullName。 – Sam 2010-11-11 14:33:10

1

首先,我認爲更容易使用程序集的文件版本信息來將應用程序版本傳遞給用戶。見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); 
    } 
} 
+0

問題在於它返回AssemblyInfo.cs中設置的特定字符串,這意味着如果通配符修訂和構建,則會得到類似於「1.2。*」而不是「1.2.3.4」的內容 – 2012-04-04 02:48:20

+0

根據MSDN(http:// msdn.microsoft.com/en-us/library/system.reflection.assemblyfileversionattribute.assemblyfileversionattribute。aspx)通配符不支持AssemblyFileVersionAttribute,並且這樣做會發出編譯器警告,因爲在此上下文中沒有意義。版本的通配符的使用僅適用於AssemblyVersion(http://msdn.microsoft.com/en-us/library/system.reflection.assemblyversionattribute.assemblyversionattribute.aspx) – 2012-07-11 01:09:42

1
public static string GetVersion() 
    { 
     return Regex.Match(Assembly.GetExecutingAssembly().FullName, @"Version=(?<version>[\d\.]*)").Groups["version"].Value; 
    } 

是相當乾淨爲好。