Hallo,
ich verzweifle gerade an an folgendem Problem:
Ich habe ein Programm welches unter "C:\Test" läuft, in diesem benötige ich Methoden aus einer DLL, diese befindet sich zur Laufzeit unter "C:\Programme\Common Files\Test".
Wenn ich das Programm ausführe und die DLL im .exe Verzeichnis liegt, funktioniert es logischerweise.
Gibt es irgendwie eine Möglichkeit die DLL über einen festen Pfad einzubinden?
Ich habe versucht die DLL über Assembly.LoadFile einzubinden, da bekomme ich immer eine Missing.Method.Exception 😦
Eventuell kann mir hier jemand auf die Sprünge helfen.
Sowas geht, auch wenns nicht wirklich empfohlen ist - vor allem nicht auf externe Verzeichnisse, über assemblyBinding und probing
Siehe Verweis auf DLL im kompilierte Projekt in ein Unterverzeichnis bringen
Gibt aber ein paar seltene Szenarien, wo das derzeit nicht unterstützt wird.
probing privatePath="..." doesn't work in .Net 5.0
Edit: interessant, ich dachte hier würden mittlerweile auch vollständige Pfade funktionieren.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
vielen Dank erstmal.
Im privatePath gehen aber leider nur Unterverzeichnisse.
Du kannst das Laden der Assembly auch selber implementieren:
https://learn.microsoft.com/en-us/dotnet/api/system.appdomain.assemblyresolve
Das Beispiel ist etwas doof, im Wesentlichen geht's nur um das AssemblyResolve-Event, das aufgerufen wird, wenn er eine Assembly nicht findet. Dort bekommst Du dann den Namen mitgeteilt und kannst die Assembly selber nach deinen eigenen Regeln von einer Datei laden.
Wer [...] kann, ist klar im Vorteil.
lock
Alternative fürasync
/await
: https://github.com/loop8ack/AsyncTicketLock