webentwicklung-frage-antwort-db.com.de

Dll sowohl in der Abfalleimer als auch im GAC, welche wird verwendet?

Wir haben eine Webanwendung, die auf vielen Websites nur mit Frontend-Änderungen bereitgestellt wird. Der freigegebene Backend-Abschnitt enthält seine DLL im GAC. Wir müssen also nur diese DLL aktualisieren und alle Websites erhalten das Update.

Gibt es eine Möglichkeit, die GAC mit einem DLL im Ordner/bin zu überschreiben, um neue Funktionen zu testen, bevor sie veröffentlicht werden?

67
John Boker

Wenn es dieselbe Versionsnummer wie die referenzierte DLL hat, wird der GAC verwendet. 

Wenn Sie die Versionsnummer inkrementieren, die Website mit der neuen Versionsnummer neu erstellen, die neue Version in das Verzeichnis/bin ablegen, wird DLL verwendet.

Wenn Sie die Versionsnummer nicht ändern möchten, haben Sie so ziemlich kein Glück. 

Wenn .NET starke benannte Assemblys lädt, versucht es zunächst zu entscheiden, welche Versionsnummer verwendet werden soll. Dies geschieht zuerst über die Referenz, dann sucht sie nach Publisher-Richtlinien , dann sucht sie nach bindenden Weiterleitungen in der Konfigurationsdatei. 

Danach sucht er nach der Assembly im GAC, dann in einer beliebigen codebase und sucht dann nach verschiedenen Dateisystemordnern für die DLL. Wenn bei einem dieser Schritte die richtige Version Assembly gefunden wird, stoppt sie.

Wenn Sie die Versionsnummer Ihrer starken Assembly nicht ändern, findet .NET die ursprüngliche Versionsnummer im GAC und hört auf zu suchen. Beachten Sie, dass das Festlegen einer Codebasis für Ihre Assembly nichts nützt, da sie nicht mehr angezeigt wird, wenn eine gefunden wird, und wenn Sie zuerst in der GAC suchen.

79
Adam Sills

Ich konnte die GAC mit der Assembly im Ordner\bin mit dem Element <codebase> überschreiben.

Durch Angabe von <codebase version="1.2.3.4" href="/bin/MyAssembly.dll" /> in meiner Datei web.config kann ich meiner Anwendung sagen, dass sie diese Version anstelle der in der GAC angegebenen Version verwenden soll.

Vielleicht möchten Sie auch das Element <probing> für die Angabe von Montageorten betrachten?

11
IsolatedStorage

Ich denke, ich könnte dasselbe denken wie Adam Sills, formulierte es jedoch für mein Verständnis. Durch meine eigenen Tests sieht es so aus:

  • Wenn Ihre App mit der Version 1.0.0.0 und 1.0.0.1 im GAC kompiliert ist, können Sie die .dll aus Ihrem/bin weglassen.
  • Wenn Ihre App mit Version 1.0.0.1 und 1.0.0.0 im GAC kompiliert ist, MÜSSEN Sie die .dll-Datei in/bin platzieren, um das GAC zu ignorieren. Ein Fehler tritt auf, wenn die GAC-Version älter ist als die erforderliche Version Ihrer App, es sei denn, Sie fügen die neuere Version in/bin ein.

Ich hoffe das ist richtig ...

2
J.Hendrix

Sie können Bindungsinformationen in der Protokolldatei mithilfe des Assembly Binding Log Viewer (Fuslogvw.exe) anzeigen, das im Windows Software Development Kit (SDK) enthalten ist.

s

0
BALKANGraph