2010-02-19 6 views
26

Quiero mostrar el número de versión de mi aplicación de Silverlight 3 en el cuadro Acerca de, pero cuando se utiliza una llamada .Net tradicional como:conseguir la versión de tiempo de ejecución de un conjunto de Silverlight

Assembly.GetExecutingAssembly().GetName().Version; 

consigo un MethodAccessException en el GetName() llamada. ¿Cómo se supone que obtendré el número de versión de mi ensamblaje?

Respuesta

48
private static Version ParseVersionNumber(Assembly assembly) 
{ 
    AssemblyName assemblyName = new AssemblyName(assembly.FullName); 
    return assemblyName.Version; 
} 

o esto:

Assembly assembly = Assembly.GetExecutingAssembly(); 
String version = assembly.FullName.Split(',')[1]; 
String fullversion = version.Split('=')[1]; 

Desde: http://betaforums.silverlight.net/forums/p/128861/288595.aspx

un post al respecto:

http://forums.silverlight.net/forums/p/93400/214554.aspx

Usted puede mirar en el archivo JS he publicado aquí: Detect Silverlight version required by an assembly

Su error es esperado. Como es crítico para la seguridad, los anteriores son algunos ejemplos.

+2

GetExecutingAssembly también devuelve un tipo de Asamblea, es la llamada de la GetName el que falla. – AnthonyWJones

+0

que debería ayudarlo a superarlo, lo probé y funciona bien. –

+0

Me gusta la primera solución. Parece más limpio. Ambos funcionan, sin embargo. – Dov

6

GetName está marcado como Crítico de seguridad y, por lo tanto, se obtiene una excepción cuando se intenta llamar.

Deberá usar la propiedad FullName y analizar la parte Version=x.x.x.x de la cadena.

+0

son realmente paranoicos, chicos de Microsoft no son ellos – herzmeister

+2

@herzmeister der welten : Solo haría falta un pequeño contratiempo en el arenero de Silverlight para dañar seriamente su reputación. En esta etapa de la vida de Silverlight, Microsoft no puede permitirse ningún contratiempo semejante. Sospecho que hay muchas cosas que en realidad no representan una amenaza, pero como no son vitales y no han tenido un análisis exhaustivo de seguridad y pruebas, tendrán el atributo de Seguridad Crítica solo para estar seguros. – AnthonyWJones

1

Puede utilizar

Assembly.GetExecutingAssembly() 
.GetCustomAttributes(false).OfType<AssemblyVersionAttribute>() 
.Single().Version; 
+0

GetCustomAttributes (bool) no devolverá AssemblyVersionAttribute, ya que se trata de una manera "especial". Aún puede usar AssemblyFileVersionAttribute y funcionará. De lo contrario, gracias por la respuesta que no incluye cadenas de análisis :) – noaRAVE

Cuestiones relacionadas