2011-10-28 5 views
6

Desidero visualizzare il numero di versione dell'applicazione all'interno della mia applicazione e il modo più semplice per eseguire questa operazione è utilizzare il numero di versione dell'assembly.Impossibile chiamare Assembly.GetName() dall'applicazione Silverlight

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

posso ottenere l'esecuzione di assemblaggio senza problemi, ma la chiamata a GetName() restituisce un MethodAccessException con questo messaggio

Tentativo dalla sicurezza metodo trasparente 'MainPage..ctor()' per accedere di sicurezza critica metodo 'System.Reflection.Assembly.GetName()' non riuscito.

Perché sta succedendo questo, c'è qualcosa che posso fare al riguardo, e se no c'è un altro modo per recuperare la versione dell'assemblaggio?

risposta

6

L'Assembly.GetName è contrassegnato con SecurityCriticalAttribute attributo provare a utilizzare GetCallingAssembly().FullName e raschiare le informazioni sulla versione fuori di esso.

Non utilizzare questo membro nell'applicazione. Se lo fai, il tuo codice sarà lanciare un MethodAccessException. Questo membro è critico per la sicurezza, che lo limita a un uso interno da .NET Framework per Silverlight libreria di classi. [SICUREZZA CRITICAL]

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

8

ho ricevuto questo da StackOverflow (Getting runtime version of a Silverlight assembly) ... per me funziona:

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; 
    }