Laden...

Verschiedene .dll's von anderer Software einbinden

Erstellt von Mandy vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.713 Views
M
Mandy Themenstarter:in
47 Beiträge seit 2008
vor 11 Jahren
Verschiedene .dll's von anderer Software einbinden

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

W
872 Beiträge seit 2005
vor 11 Jahren

Wenn Du %PATH% aendern kannst, koenntest Du dort die Referenzen auf die Verzeichisse fuer die DLLs anpassen, anstatt zu kopieren.

M
Mandy Themenstarter:in
47 Beiträge seit 2008
vor 11 Jahren

Kannst du mir noch sagen, was du mit %Path% meinst?

S
178 Beiträge seit 2009
vor 11 Jahren

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.

S
269 Beiträge seit 2010
vor 11 Jahren

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")

M
Mandy Themenstarter:in
47 Beiträge seit 2008
vor 11 Jahren

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

M
Mandy Themenstarter:in
47 Beiträge seit 2008
vor 11 Jahren

Ist das assemblyresolve ein sinnvolle Lösung?

Habt ihr das schon mal verwendet?
Oder gibt es eine bessere Lösung?

W
872 Beiträge seit 2005
vor 11 Jahren

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.

49.485 Beiträge seit 2005
vor 11 Jahren

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

M
Mandy Themenstarter:in
47 Beiträge seit 2008
vor 11 Jahren

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.

M
Mandy Themenstarter:in
47 Beiträge seit 2008
vor 11 Jahren

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...

S
178 Beiträge seit 2009
vor 11 Jahren

Schreib dir doch ne Batch Datei die vo dem Build (PreBuild Action) die DLLs in das passende Verzeichnis kpoiert.

Das ist doch am einfachsten