2010-11-11 13 views
12

En mis aplicaciones C# Por lo general obtener la versión (para mostrar el cliente) con el siguiente código:Obtenga la versión Asamblea en Windows Phone 7

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

Esto no funciona en Windows Phone 7 (se cuelga el emulador , y el bloqueo del teléfono es un no-no para MS).

Entonces, ¿cómo obtengo la versión de la ejecución en un dispositivo con Windows Phone 7?

[Actualizar] como se indica en los comentarios a continuación, llamando a GetName() en una aplicación wp7 parece ser el problema.

+0

Definitivamente informaré esto a Microsoft. ¡Su código es correcto, y el bloqueo definitivamente es causado por un error en .NET en el emulador o en todo .NET para WP7! –

Respuesta

22

Prueba esto:

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

/highfive Matt :) –

+0

Bueno, esto es esencialmente lo mismo que escribí anteriormente, y cuelga el teléfono al igual que mi versión. – Sam

+1

@Sam esto funciona para mí en aplicaciones en Marketplace. Tuve que analizar el número de versión de FullName porque 'Version' no me funcionaba. ¿Qué error estás recibiendo? –

2

¿Se analizarlo fuera del

Assembly.GetExecutingAssembly(). NombreCompleto

trabajo para usted?

ejemplo de salida: SomeApp, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null

edición: no tienen que pasar por ManifestModule

+0

Ni siquiera llego tan lejos: parece que el uso del reflejo mata el teléfono. – Sam

+0

Prueba en el dispositivo prototipo Samsung Taylor System.Diagnostics.Debug.WriteLine (Assembly.GetExecutingAssembly(). FullName); ... no probs. –

+0

Sí, tenías razón, utilicé por error GetName en lugar de FullName. – Sam

1

En primer lugar, creo que es más apropiado usar la información de la versión del archivo del ensamblaje para transmitir la versión de la aplicación al usuario. Ver http://techblog.ranjanbanerji.com/post/2008/06/26/Net-Assembly-Vs-File-Versions.aspx

En segundo lugar, ¿qué hay de hacer esto:

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

El problema es que devuelve el conjunto de cadenas particular en AssemblyInfo.cs, lo que significa que si se revisan y compilan comodines, se obtiene algo como "1.2. *" En lugar de "1.2.3.4" –

+0

Según MSDN (http: // msdn.microsoft.com/en-us/library/system.reflection.assemblyfileversionattribute.assemblyfileversionattribute.aspx) no son compatibles con AssemblyFileVersionAttribute, y al hacerlo emitirá una advertencia de compilación porque no tiene sentido en este contexto. El uso de comodines para la versión solo se aplica a 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; 
    } 

es bastante limpio también.