2010-11-11 2 views
12

В моих C# приложений, которые я обычно получаю версию (чтобы показать клиенту), используя следующий код:Получить версию сборки на Windows Phone 7

System.Reflection.Assembly.GetExecutingAssembly().GetName().Version 

Это не работает в Windows Phone 7 (он висит эмулятор , а сбой телефона - нет-нет для MS).

Итак, как мне получить версию выполнения на устройстве Windows Phone 7?

[Обновить], как указано в комментариях ниже, вызов функции GetName() в приложении wp7 кажется проблемой.

+0

Я бы точно сообщил об этом Microsoft. Ваш код верен, а зависание определенно вызвано ошибкой либо в .NET в эмуляторе, либо во всем .NET для WP7! –

ответ

22

Попробуйте это:

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

/highfive Matt :) –

+0

Ну, это по существу то же самое, что я написал выше, и он висит на телефоне так же, как моя версия. – Sam

+1

@Sam это работает для меня в приложениях на Marketplace. Мне пришлось анализировать номер версии из FullName, поскольку «Версия» не работала для меня. Какую ошибку вы получаете? –

2

ли разбор его из

Assembly.GetExecutingAssembly(). FullName

работы для вас?

пример вывода: SomeApp, Version = 1.0.0.0, культура = нейтральной, PublicKeyToken = нуль

редактировать: не нужно проходить через ManifestModule

+0

Я даже не добираюсь так далеко: кажется, использование отражения убивает телефон. – Sam

+0

Тестирование на прототипе устройства Samsung Taylor System.Diagnostics.Debug.WriteLine (Assembly.GetExecutingAssembly(). FullName); ... нет проблем. –

+0

Да, вы были правы, я ошибочно использовал GetName вместо FullName. – Sam

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» –

+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) –

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

довольно чистый, как хорошо.