Hallo,
hat jemand eine Idee zu meinem Verteilungsproblem:
Ich habe eine Schnittstelle ERP-System <--> webshop / amazon.
Die Schnittstelle verwendet Unmengen an .dll's des ERP-Systems.
Damit bekomme ich aber ein Problem mit den ERP-Updates,
das relativ oft einige .dll's erneuert, die dann jedesmal auch wieder
in mein Verzeichnis kommen müssen.
Ich hätte jetzt gerne zur Laufzeit einen Verweis gesetzt,
damit ich die .dll's nicht in mein \bin - Verzeichnis kopieren muß.
Geht das überhaupt?
Anmerkung:
* GAC ist keine Lösung....
* Die Schnittstellen der .dll's ändern sich garantiert nicht
Vielen Dank,
Manfred
Wenn Du %PATH% aendern kannst, koenntest Du dort die Referenzen auf die Verzeichisse fuer die DLLs anpassen, anstatt zu kopieren.
Kannst du mir noch sagen, was du mit %Path% meinst?
Er meint die Umgebungsvariable PATH, die du unter Systemsteuerung ändern kannst.
Tipp einfach mal in eine CMD das Wort "path" (ohne Anführungszeichen ein) und du siehst schonmal alles was da bisher drin steht.
Damit ist die Windows-Umgebungsvariable PATH bzw. %PATH% gemeint.
Unter XP findest man diese Einstellungen zum Beispiel unter:
Systemeigenschaften (Start -> rechtklick auf Arbeitsplatz -> Eigenschaften) -> Reiter "Erweitert" -> Knopf "Umgebungsvariablen"
Programme/Dateien in einem Ordner, welcher sich in dieser Umgebungsvariablen PATH befindet, können ohne vollstände Pfadangabe angesprochen werden.
(Deswegen kann man über Start -> Ausführen die Windows-"Systemprogramme" z.B. alle direkt über den Namen starten, wie "cmd", "calc" oder "notepad")
Jetzt is mir klar was er meint.
Meine .exe wird als Task oder Service gestartet.
Der Aufruf ist immer gleich, muß also nicht in den %Path% 8o
Die .dll liegen in einem Ordner der von der .exe als dll-Verzeichnis erkannt werden soll.
Und das geht mit einem %Path% - Eintrag nicht, oder?
Edit: So eine Art dynamischer Verweis. Die .dll's liegen zur Laufzeit nicht bei der .exe
Ist das assemblyresolve ein sinnvolle Lösung?
Habt ihr das schon mal verwendet?
Oder gibt es eine bessere Lösung?
Die saubere Loesung waere das hier:
Codebase bei MSDN.
Du solltest Dir natuerlich bewusst sein, dass Du immer noch Probleme bekommen kannst, wenn sich die Versionsnummern der dll aendern.
Hallo Mandy,
vom Grundsatz her gehören die Assemblies (DLLs) in Anwendungsverzeichnis, ein Unterverzeichnis davon oder in der GAC. Ob man über die Konfiguration überhaupt Verzeichnisse außerhalb der genannten Orte angeben kann, damit dort Assemblies gesucht werden, habe ich nicht parat. Benötigt habe ich das noch nicht. Oder geht es überhaupt nicht um .NET-Assemblies?
herbivore
Danke weismat,
das war ein guter Hinweis.
Ich habe es versucht mit
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="C:\Program Files (x86)\Sage\Office Line\6.0\Shared\"/>
</assemblyBinding>
</runtime>
im app.config, damit sollten auch die Versionsnummern keine Rolle spielen.
In diesem Pfad liegen die .dll's alle.
Allerdings hilft es genau nichts !!??
@herbivore: Du hast grundsätzlich Recht, keine Frage.
Allerdings will ich nicht eine Unmenge an .dll's eines fremden Systems in den GAC legen.
Und das Kopieren in mein Anwendungsverzeichnis ist auch nicht das wahre,
denn es ist nur eine Frage der Zeit, wann ich eine veraltet Version verwende.
Also ist in diesem Fall ein Pfad auf das Originalverzeichnis wohl die bessere Lösung.
In diesem Pfad liegen die .dll's alle.
Allerdings hilft es genau nichts !!??
Falls es noch andere gibt, die nicht sinnerfassend lesen können 🙁 :
<probing> funktioniert nur unterhalb des Anwendungspfades...
Schreib dir doch ne Batch Datei die vo dem Build (PreBuild Action) die DLLs in das passende Verzeichnis kpoiert.
Das ist doch am einfachsten