Programmgesteuert die Versionsnummer einer DLL abrufen
Ist es möglich, die Versionsnummer, die programmgesteuert von jedem .NET-DLL?
Wenn ja, wie?
InformationsquelleAutor der Frage JL. | 2009-11-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wichtig:
Es sollte beachtet werden, dass dies nicht die beste Antwort auf die ursprüngliche Frage. Vergessen Sie nicht, Lesen Sie mehr auf dieser Seite.
InformationsquelleAutor der Antwort Kris
Dies funktioniert, wenn die dll-Datei ist .net oder Win32. Reflexion Methoden funktionieren nur, wenn die dll .net. Auch, wenn Sie nachdenken, Sie haben den Aufwand für das laden der gesamten dll in den Speicher. Die unter-Methode nicht laden der assembly in den Speicher.
Aus: http://msdn.microsoft.com/en-us/library/system.diagnostics.fileversioninfo.fileversion.aspx
original source
InformationsquelleAutor der Antwort Ben Anderson
Zuerst von allen, gibt es zwei mögliche Versionen, die Sie interessieren könnten:
Windows-Dateisystem, Datei-version, die für alle ausführbaren Dateien
Montage-build-version, die eingebettet ist in eine .NET-assembly, die vom compiler (natürlich nur für .NET-assembly-dll-und exe-Dateien)
In der ehemaligen Fall, verwenden Sie Ben Anderson ' s Antwort; im letzteren Fall verwenden Sie
AssemblyName.GetAssemblyName(@"c:\path\to\file.dll").Version
oder Tataro Antwort, falls die assembly verwiesen wird, die von Ihrem code.Beachten Sie, dass Sie ignorieren alle Antworten, verwenden Sie
.Load()
/.LoadFrom()
Methoden, da diese eigentlich laden der assembly in die aktuelle Anwendungsdomäne - das ist Analog zu einem Baum runter schneiden, um zu sehen, wie alt Sie ist.InformationsquelleAutor der Antwort staafl
Um es für die Montage, die gestartet wurde (Windows forms, Konsole, app, etc...)
InformationsquelleAutor der Antwort Agent_9191
Hier ist ein netter Weg, mit ein bisschen nachdenken, um eine version einer DLL mit einer bestimmten Klasse:
Einfach ersetzen !Klasse! mit dem Namen einer Klasse, die definiert ist in der DLL, die Sie wünschen, um die version von.
Dies ist meine bevorzugte Methode, weil wenn ich den DLLs um für andere setzt, die ich nicht ändern Sie den Dateipfad.
InformationsquelleAutor der Antwort Totero
Kris, deine version funktioniert Super, wenn Sie benötigen, laden Sie die assembly aus der DLL-Datei (und wenn die DLL da ist!), aber, man wird ein viel unerwünschte Fehler wenn die DLL EINGEBETTET ist (d.h., nicht eine Datei, sondern ein embedded-DLL).
Die andere Sache ist, wenn man verwendet eine Versionierung Schema mit so etwas wie "1.2012.0508.0101", wenn man der version-string werden Sie tatsächlich "1.2012.518.101"; Hinweis: die fehlenden Nullen.
So, hier ein paar zusätzliche Funktionen, um die version einer DLL (eingebettet oder aus der DLL-Datei):
InformationsquelleAutor der Antwort MacSpudster
InformationsquelleAutor der Antwort Invincible
Können Sie mit System.Reflexion.Montage.Load* () - Methoden, und dann schnappen Sie sich Ihre AssemblyInfo.
InformationsquelleAutor der Antwort Ariel
Während die ursprüngliche Frage kann nicht zu einer bestimmten web-service, hier ist eine komplette testWebService können Sie fügen Sie anzeigen, um eine web-service-nicht-cached-response-plus-version der Datei. Wir verwenden Datei-version anstelle der Assemblyversion, weil wir wissen wollen, eine version, aber mit allen Montage-Versionen 1.0.0.0, die web-site kann leicht gepatcht (Unterzeichnung und Nachfrage link noch aktiv!). Ersetzen Sie @Klasse@ mit dem Namen der web-api-controller diese Dienstleistung ist eingebettet in. Es ist gut für eine go/nogo auf einen web-service sowie eine schnelle version überprüfen.
Fand ich es auch notwendig, fügen Sie die folgenden web.config unter Konfiguration machen es wirklich anonyme
InformationsquelleAutor der Antwort Wray Smallwood