Benutzer mit den meisten Antworten
Info: Dateinamen der eigenen .dll aus der .dll ermitteln

Frage
-
Guten Tag,
ich hatte das Problem, dass ich aus einer von mir erstellten .dll den Speicherort und auch den Namen der Bibliothek (so trivial das klingen mag) ermitteln wollte. Nach längerem suchen im WWW und unzähligen Verweisen auf API-Funktionen bin ich auf diese Lösung mit .NET-Funktionen gestoßen:
Dim DLLName As String = System.Uri.UnescapeDataString((New System.Uri(Reflection.Assembly.GetExecutingAssembly().CodeBase)).AbsolutePath)
Vielleicht kann es mal jemand brauchen.
MfG,
fro
Antworten
-
Solange die DLL über einen normalen Verweis hinzugefügt wurde, sollte der Pfad zur DLL zurück gegeben werden. (Habe es mit einer Konsole getestet.)
Anders ist es natürlich, wenn die DLL als Bytes Array geladen wird. Wie ich schon oben schrieb, sollte man die Hinweise aus der MSDN beachten.Wenn du willst, kannst du versuchen über den Typ einer Klasse an die Assembly heran zu kommen.
GetType(Class1).Assembly.Location 'Class1 ist in der DLL
Dabei sollte das selbe heraus kommen wie mit meinem Code. Bei einer Konsole mit Standardbibliothek ohne besondere Einstellungen sollte auch dein Code das selbe Ergebnis haben.Tom Lambert - C# MVP
Bitte bewertet- und markiert Beiträge als Antwort. Danke.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort markiert f_ro Sonntag, 4. Mai 2014 20:27
Alle Antworten
-
Hallo,
folgendes sollte auch ausreichen:Assembly.GetExecutingAssembly().Location
Dabei wird einfach der Pfad der ausgeführten Datei ermittelt. (DLLs kann man auch "ausführen").
Die Assembly-Klasse liegt im System.Reflection-Namespace.
Zu beachten sind aber auch die Hinweise in der MSDN zu Assembly.Location und Assembly.CodeBase.PS: Da du keine Frage gestellt hast, eignet sich der Thread-Typ "Diskussion" besser. Das kannst du nachträglich ändern, indem du über deiner Frage auf "Typ ändern" klickst.
Tom Lambert - C# MVP
Bitte bewertet- und markiert Beiträge als Antwort. Danke.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets -
Danke für die Antwort,
den Thread wollte ich eigentlich von Frage auf Diskussion ändern aber wahrscheinlich war ich blind!?
Mit
Reflection.Assembly.GetExecutingAssembly().Location
hatte ich es auch zu Beginn versucht aber durch diese Funktion wird der Dateiname des ausführendes Programms (sprich das Programm das den Verweis auf die Bibliothek enthält) zurückgegeben und eben nicht der Name der Bibliothek.
Deswegen dieser Thread.
MfG,
fro
-
Solange die DLL über einen normalen Verweis hinzugefügt wurde, sollte der Pfad zur DLL zurück gegeben werden. (Habe es mit einer Konsole getestet.)
Anders ist es natürlich, wenn die DLL als Bytes Array geladen wird. Wie ich schon oben schrieb, sollte man die Hinweise aus der MSDN beachten.Wenn du willst, kannst du versuchen über den Typ einer Klasse an die Assembly heran zu kommen.
GetType(Class1).Assembly.Location 'Class1 ist in der DLL
Dabei sollte das selbe heraus kommen wie mit meinem Code. Bei einer Konsole mit Standardbibliothek ohne besondere Einstellungen sollte auch dein Code das selbe Ergebnis haben.Tom Lambert - C# MVP
Bitte bewertet- und markiert Beiträge als Antwort. Danke.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort markiert f_ro Sonntag, 4. Mai 2014 20:27
-
Nochmal danke für die Antwort,
Asche auf mein Haupt!
Mein Fehler war, dass ich davon ausgegangen bin, dass mir der Aufruf aus dem My-Namespace
My.Application.Info.AssemblyName
das gleiche Ergebnis liefert wie
Reflection.Assembly.GetExecutingAssembly().Location
wohlgemerkt in dieser Assembly (.dll)!
Ich weiß, ich weiß! Man soll den My-Namespace nicht verwenden! Ich programmiere aber nur für mich selbst und so gesehen habe ich damit keine Probleme. In Zukunft werde ich vorsichtiger sein.
Schönen Abend noch,
fro