NeoGriever: VB.NET - Version von DLL dynamisch auslesen - Problem

Hallo

Ich habe ein "klitzekleines" Problemchen.

---
Dim ver As String = System.Reflection.Assembly.LoadFile("C:\meinedll.dll").GetName().Version.ToString()
---

Das ist meine kleine Zeile, womit ich die Version aus einer DLL lese.

Jedoch habe ich ein schwerwiegendes Problem: Die DLL ist ab dem Zeitpunkt in mein Programm "geladen" und kann nicht gelöscht werden solange mein Programm läuft.

Mein Ziel ist es, die DLL dynamisch zu updaten. Somit ein Versions-Vergleich. Doch sowie ich LoadFIle gemacht hab, kann ich die Datei nicht mehr ändern/löschen. Wie kann ich diese wieder "entladen"?

Verzweifel da voll dran.

Und das mit AppDomain kapier ich irgendwie auch nicht. Da steht, man solle die Datei mittels einer separaten AppDomain laden. Jedoch akzeptiert die .Load-Funktion der AppDomain weder Dateipfad noch Datei (Byte-Array) ...

Der Zugriff auf die Datei erfolgt nicht unmittelbar danach, sondern erst später beim Klick auf einen Button.

Kennt da jemand eine Lösung für?

Ansonsten mach ichs einfach per XML-Dokument für die Versionsinfos.

  1. Hi,

    Dim ver As String = System.Reflection.Assembly.LoadFile("C:\meinedll.dll").GetName().Version.ToString()

    Jedoch habe ich ein schwerwiegendes Problem: Die DLL ist ab dem Zeitpunkt in mein Programm "geladen" und kann nicht gelöscht werden solange mein Programm läuft.

    Lass uns zusammen googlen lernen (bzw. dich lernen, ich kann das schon) - vb.net check dll version without loading

    -> http://www.eggheadcafe.com/community/aspnet/2/10013861/how-to-read-assembly-version-no-.aspx

    Den Weg, der dort für C#.NET beschrieben ist, solltest du ohne größere Probleme für VB.NET adaptieren können - schließlich sind diese MicroSoft-Sprachen im wesentlichen alle aus „einer Familie“, unterscheiden sich in solchen Dingen hauptsächlich in der konkreten Syntax, bei weitestgehend gleichen Features.

    Und die MSDN hat auch meist Hinweise auf den Umgang mit den Objekten in den verschiedenen „Dialekten“.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Lass uns zusammen googlen lernen (bzw. dich lernen, ich kann das schon) - vb.net check dll version without loading

      Wenn ichs kapieren würde, wie das funzen soll, wär das ja schön und gut. Doch ich schnall es nicht.

      Würdest du mir bitte ein beispielcode liefern, mit welchem ich arbeiten kann? Kapier nämlich nicht, was die da erzählen von AppDomains und so. Krieg das nicht unter die Haube.

      Wär wirklich sehr dankbar.

      1. Das muss erstmal einer begreifen o_o

        ---
        Dim ver As String = AssemblyName.GetAssemblyName("C:\meinedll.dll").Version.ToString()
        ---

        So kann ich die Version auslesen ohne die DLL zu laden. Sehr schön.

        Danke nochma. Bin doch noch durch die Beiträge durchgekommen.

        Ich hab das jetzt hier hingeschrieben, damits andere via google eventuell auch schnell finden können :D

        1. So.

          Jetzt möcht ich, um das Update-Script zu optimieren, wissen, ob es möglich ist, mittels PHP die Version aus einer DLL zu lesen?

          Google liefert mir nix brauchbares bei der Suche nach "PHP get DLL Version" oder "PHP Version of DLL"

          Da krieg ich nur suchergebnisse, wos um PHP5-Installation oder die php.dll geht.

          Hast da eventuell auch nen Trick/Link parat, wo ich nachschauen könnte?

          1. Hi!

            Jetzt möcht ich, um das Update-Script zu optimieren, wissen, ob es möglich ist, mittels PHP die Version aus einer DLL zu lesen?
            Google liefert mir nix brauchbares bei der Suche nach "PHP get DLL Version" oder "PHP Version of DLL"

            Das kann auch daran liegen, dass es sowas nicht gibt.

            Hast da eventuell auch nen Trick/Link parat, wo ich nachschauen könnte?

            Nun, DLLs sind ein windowsspezifisches Phänomen, PHP kommt aber aus der Unix-Ecke. Das heißt, es müsste - wenn überhaupt - eine windowsspezifische Lösung geben. Was bietet das PHP-Manual zu windowsspezifischen Dingen an?

            *) _________

            Alternativ wäre möglich, ein Kommandozeilenprogramm in VB.NET/C# zu schreiben, das die gewünschte Information ermittelt und ausgibt. Dieses sollte sich mit exec() und Konsorten starten lassen.

            *) = Bitte ausfüllen

            Lo!

            1. Okay. Werd ichs wohl von Hand eintragen müssen. :D

              Aber passt schon.

              Is ja nich so, als müßte ich 1000 dateien in die xml-datei einbinden XD