2009-08-03 9 views
1

Ich muss eine Liste von Assemblys iterieren und deren Versionsnummern ermitteln. Ich habe System.Reflection.Assembly.GetExecutingAssembly() verwendet. GetName(). Version zuvor, aber in diesem Fall arbeite ich mit Baugruppen, die noch nicht geladen wurden. Ich verstehe, dass ich System.Reflection.Assembly.ReflectionOnlyLoadFrom ("assembly.dll") verwenden kann, aber ich habe gelesen, dass dies Speicher essen kann, wenn ich die Assemblys nicht in ihrer eigenen Anwendungsdomäne lade und sie dann entlade. Ist dies für ReflectionOnlyLoadFrom() oder nur LoadFrom() wahr?Vorschläge für die effizienteste Methode zum Abrufen einer Assemblyversion von einer externen Assembly

Gibt es alternativ eine Möglichkeit, die Versionsinformationen zu erhalten, ohne die Baugruppe zu laden?

Antwort

6

Werfen Sie einen Blick auf System.Reflection.AssemblyName. Sie können

AssemblyName.GetAssemblyName("foo.dll").Version 

tun, die System.Version Objekt zurückgibt, wo man Dur, Moll, Moll Revison und Revisionsinformationen erhalten können. Nach den Msdn article auf GetAssemblyName Methode:

Das funktioniert, wenn die Datei ein Assembly-Manifest enthält. Diese Methode bewirkt, dass die Datei geöffnet und geschlossen wird, aber die Assembly nicht zu dieser Domäne hinzugefügt wird.

+0

Akzeptiert über Cecil Vorschlag, da dies keine Abhängigkeiten in unserer Umgebung einführt. – grenade

+0

Sei gewarnt, hier sind Drachen! Das funktionierte gut für uns, aber als verschiedene Arten von Projekten (WPF macht seltsame Dinge) mit unterschiedlichen Referenzanforderungen, begann es sich schlecht zu benehmen, und die Probleme sind nicht leicht aufzuspüren. Ich verschiebe unseren Code, um Cecil zu verwenden. – si618

1

Sie könnten die Cecil-Bibliothek des Mono-Projekts verwenden.

+0

Ich mag diese Idee sehr. – grenade

-1

Ich denke, sie sind keine Möglichkeit, Montageversion zu bekommen, ohne es zu laden.

Verwandte Themen