Announcement

Collapse
No announcement yet.

gemeinsam genutzte DLL's ?

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

  • gemeinsam genutzte DLL's ?

    Hallo,

    habe gerade irgendwie ein Logikproblem mit meiner c# Anwendung.

    ich benutze diverse dlls, die ich als referenz in meine anwendung eingebunden habe.
    die kopiert er alle in in das bin\debug bzw bin\release verzeichnis.

    wie stelle ich es nun an, dass er auf eine dll zugreift, die sich irgendwo zentral auf meinem rechner befindet(z.b. c:\windows\system) ?

    bei den eigenschaften von den referenzen kann ich ja einstellen, dass er keine lokale kopie erstellt. aber er zieht sich dummerweise die dll nicht aus einem der verzeichnisse, die in der umgebungsvariable hinterlegt sind, sondern bringt eine FileNotFoundException.

    kann mir mal bitte jemand auf die Sprünge helfen? :c

    greetz
    premier

  • #2
    Hallo,

    >..die sich irgendwo zentral auf meinem rechner befindet...

    die CLR unterscheidet zwischen Private Assemblies und Shared Assemblies. Die gemeinsam zu verwendenden Assemblies kommen in der Regel in den GAC (Global Assembly Cache), so dass der tatsächliche Pfad keine Rolle spielt und auch nicht im Suchpfad enthalten sein muss.

    Für das Laden einer Assembly (alias Probing) sind unter .NET zwei Bestandteile zuständig: <br>
    1. Der Assembly Loader lädt die Assembly direkt über eine URL. <br>
    2. Der Assembly Resolver löst die als Referenz eingebundene Assembly (/r-Schalter der Kommandozeilencompiler) erst zur Laufzeit auf und ermittelt die tatsächliche URL, die vom Assembly Loader benötigt wird. <br>
    <br>
    Das Laden einer Assembly lässt sich in verschiedene Arbeitsschritte unterteilen. Zuerst such die CLR nach einer anwendungsspezifischen Konfigurations-Datei mit der Dateiendung <b>.config</b>. Wird dies gefunden, sucht die CLR dort nach Einträgen, die den Ladevorgang beeinflussen – wie zum Beispiel <b>CodeBase</b> oder <b>privatePath</b>. Außerdem wird die Assembly auch im <b>AppBase</b>-Verzeichnis (also dem Installationsverzeichnis der aufrufenden Anwendung) gesucht. Nur dann, wenn die angeforderte DLL einen Strong Name besitzt, sucht die CLR auch im Global Assembly Cache (<b>GAC</b>). Ist auch dort keine passende Assembly aufzutreiben, berücksichtigt die CLR die vorgefundenen Versionsnummern-Policies, so dass ein "Umbiegen" auf andere Versionsnummern unterstützt wird.

    Das Tool <b>Assembly Binding Log Viewer</b> (FUSLOGVW.EXE) protokolliert genau mit, wo die CLR überall nach dieser Assembly gesucht hat, bevor die Exception geworfen wurde.

    Comment

    Working...
    X