2010-02-19 5 views
26

voglio mostrare il numero di versione di mia applicazione Silverlight 3 nella finestra di informazioni, ma quando uso una chiamata Net tradizionale come:versione runtime Ottenere di un assieme di Silverlight

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

ho un MethodAccessException sul GetName() chiama. Come dovrei ottenere il numero di versione del mio assembly?

risposta

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

o questo:

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

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

un post su di esso:

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

Potete guardare il file js ho postato qui: Detect Silverlight version required by an assembly

Il tuo errore è atteso. Dato che è un aspetto critico, sopra ci sono alcuni problemi.

+2

GetExecutingAssembly restituisce anche un tipo di assemblea, la sua chiamata la GetName che non riesce. – AnthonyWJones

+0

che dovrebbe farti passare, l'ho appena testato e funziona perfettamente. –

+0

Mi piace la prima soluzione. Sembra più pulito. Entrambi funzionano, tuttavia. – Dov

6

GetName è contrassegnato come Critico di sicurezza e quindi si ottiene un'eccezione quando si tenta di chiamarlo.

È necessario utilizzare la proprietà FullName e analizzare la parte Version=x.x.x.x della stringa.

+0

sono davvero paranoici i ragazzi Microsoft non sono loro – herzmeister

+2

@herzmeister der welten : Basterebbe un piccolo inconveniente nella sandbox Silverlight per danneggiare seriamente la sua reputazione. A questo punto della vita di Silverlight, Microsoft non può permettersi un simile incidente. Ho il sospetto che ci siano molte cose che in realtà non rappresentano una minaccia, ma perché non sono vitali e non hanno avuto un'analisi approfondita della sicurezza e test che avranno l'attributo Security Critical solo per essere sicuri. – AnthonyWJones

1

È possibile utilizzare

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

GetCustomAttributes (bool) non restituirà AssemblyVersionAttribute, poiché viene trattato in modo "speciale". È ancora possibile utilizzare AssemblyFileVersionAttribute e funzionerà. Altrimenti, grazie per la risposta che non include le stringhe di analisi :) – noaRAVE