2011-10-28 18 views
6

Quiero mostrar el número de mi aplicación en mi aplicación, y la forma más sencilla de hacerlo es usar el número de versión para el ensamblaje.No se puede llamar a Assembly.GetName() desde mi aplicación Silverlight

var assembly = System.Reflection.Assembly.GetExecutingAssembly(); 
var name = assembly.GetName(); 
return String.Format("Version {0}.{1}", name.Version.Major, name.Version.Minor); 

puedo conseguir la ejecución de montaje sin ningún problema, pero la llamada a GetName() devuelve una MethodAccessException con este mensaje

intento por parte de la seguridad método transparente 'MainPage..ctor()' para acceder seguridad crítica método 'System.Reflection.Assembly.GetName()' falló.

¿Por qué ocurre esto, hay algo que pueda hacer al respecto, y si no hay otro medio para recuperar la versión de ensamblaje?

Respuesta

6

El Assembly.GetName está marcado con el atributo SecurityCriticalAttribute intente utilizar GetCallingAssembly().FullName y elimine la información de la versión.

No utilice este miembro en su aplicación. Si lo hace, su código será y arrojará una MethodAccessException. Este miembro es crítico para la seguridad, que lo restringe a uso interno por .NET Framework para la biblioteca de clases de Silverlight. [Crítico de seguridad]

de: http://msdn.microsoft.com/en-us/library/9w2wdeze(VS.95).aspx

8

llegué esto desde Stackoverflow (Getting runtime version of a Silverlight assembly) ... funciona para mí:

public static string GetVersion() 
    { 
     string versionNumber = ParseVersionNumber(Assembly.GetExecutingAssembly()).ToString(); 
     return versionNumber; 
    } 

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