Ответ 1
Попробуйте следующее:
private static string GetVersionNumber()
{
var asm = Assembly.GetExecutingAssembly();
var parts = asm.FullName.Split(',');
return parts[1].Split('=')[1];
}
В моих приложениях С# я обычно получаю версию (чтобы показать клиента) с помощью следующего кода:
System.Reflection.Assembly.GetExecutingAssembly().GetName().Version
Это не работает в Windows Phone 7 (он висит эмулятор, а сбой телефона - нет для MS).
Итак, как мне получить версию выполнения на устройстве Windows Phone 7?
[Обновить], как указано в комментариях ниже, вызов функции GetName() в приложении wp7 кажется проблемой.
Попробуйте следующее:
private static string GetVersionNumber()
{
var asm = Assembly.GetExecutingAssembly();
var parts = asm.FullName.Split(',');
return parts[1].Split('=')[1];
}
Разбирает ли это из
Assembly.GetExecutingAssembly(). FullName
работает для вас?
Пример вывода: SomeApp, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null
edit: не нужно проходить через ManifestModule
Во-первых, я думаю, что более вероятно использовать информацию о версии файла сборки для передачи версии приложения пользователю. См. 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);
}
}
public static string GetVersion()
{
return Regex.Match(Assembly.GetExecutingAssembly().FullName, @"Version=(?<version>[\d\.]*)").Groups["version"].Value;
}
также довольно чист.