Announcement

Collapse
No announcement yet.

Verweispfade eines Assemblys

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Verweispfade eines Assemblys

    Ich habe ein, wie ich hoffe, recht einfaches Problem:

    Hauptdatei.exe:

    [highlight=vbnet]
    Dim assembly As Reflection.Assembly = Reflection.Assembly.LoadFile("C:\Test\ladmich.dll" )
    Dim myProc As Object
    Dim myType As Type = assembly.GetType("AssemblyName.MyClass")
    Dim myMethod As Reflection.MethodInfo = myType.GetMethod("Start")

    Try
    myProc = Activator.CreateInstance(myType)
    Catch ex As System.Reflection.TargetInvocationException
    Throw New SystemException(ex.InnerException.Message, ex.InnerException)
    End Try
    [/highlight]

    Ich lade eine Assembly mit obigem Code, ladmich.dll. In ladmich.dll wiederrum gibt es einen Verweis auf michauch.dll.

    Funktioniert wenn:
    michauch.dll im Pfad der Hauptanwendung (Hauptdatei.exe) liegt.

    Funktioniert nicht wenn:
    1) michauch.dll im Verzeichnis von ladmich.dll (C:\Test) liegt.
    2) Wenn ein Verweispfad auf C:\Test in der Hauptdatei.exe angelegt wird.
    3) Ein Verweispfad auf c:\Test in ladmich.dll angelegt wird

    Problem ist jedesmal, dass er michauch.dll angeblich nicht findet. Da das natürlich nur ein Beispiel ist und es sich in Wahrheit um etwa 10 einzelne dll's handelt würde ich nur ungern alle in den Projektpfad schmeißen, also wie bringe ich der Anwendung bei, in einem anderen Verzeichnis nach den für die geladene dll benötigten Verweise zu suchen?

    Danke im Voraus!

  • #2
    Abhängigkeiten einer Anwendung gehören ins Anwendungsverzeichnis oder in den GAC(Global Assembly Cache). Einfach irgendeine Assembly von irgendwo her zu laden ist in .NET verpönt und sollte gemieden werden.

    Für die Probing Sequenz beim suchen und laden nach einer Abhängigkeit siehe hier.

    Wenn du unbedingt einen anderen Pfad noch zum suchen nach Assemblies angeben willst kannst du das in der App.Config konfigurieren. Siehe hier. Das bezieht sich aber nur auf Unterverzeichnisse des eigentlichen Anwendungsverzeichnisses.

    Comment


    • #3
      Mit AppDomain.AppendPrivatePath kann der Suchbereich für Assemblies erweitert werden. Achtung: Methode ist als <Obsolete()> gekennzeichnet, es ist also durchaus möglich, daß in einer .Net-Version > 3.5 diese Methode nicht mehr unterstützt wird.

      Comment


      • #4
        Originally posted by Ralf Jansen View Post
        Abhängigkeiten einer Anwendung gehören ins Anwendungsverzeichnis oder in den GAC(Global Assembly Cache). Einfach irgendeine Assembly von irgendwo her zu laden ist in .NET verpönt und sollte gemieden werden.
        Naja GAC ist keine so schöne Option, da auf Installer und Adminrechte verzichtet werden sollte. Und die Dateien sind ja im Anwendungsverzeichnis nur eben in einem Subordner und da hörts leider dann schon auf...

        Comment

        Working...
        X