Frage

Wann sollten Sie in die GAC installieren und wenn sollten Sie nicht? (Ich beziehe mich wirklich, auf einem Client-System installieren, wenn sie unser Produkt gekauft haben, (e)).

  1. Ich habe eine Baugruppe, die nur mit meiner einer Anwendung (GAC oder nicht-GAC)?

  2. verwendet werden wird
  3. Ich habe eine Baugruppe, die alle meine Anwendungen Aktie (GAC oder nicht-GAC)?

  4. Alle meine Anwendungen können verwenden verschiedene Versionen meiner Montage (GAC oder nicht-GAC)?

Dies sind drei Szenarien ... aber ich bin sicher, es gibt mehr. Ich bin nicht unbedingt eine Antwort auf nur diese drei Fragen suchen.

ähnliche Frage: Was sind die Vor- und Nachteile des GAC verwenden?

War es hilfreich?

Lösung

Allgemeine MS-Richtlinien

  1. no
  2. no
  3. no

GAC ist wirklich ein Repository für Microsoft gemeinsame .NET-Bibliotheken. Ja, sie können Entwickler sie verwenden auch, aber als Faustregel, wenn Sie GAC nicht benötigen, verwenden Sie es nicht. die Dinge einfach halten und lokal, wenn es nicht weh tut.

  • Ich würde GAC betrachten nur aus Leistungsgründen, zum Beispiel, wenn Sie einige großen Baugruppen haben, versuchen, sie in GAC zu setzen und NGEN sie. Es sollte die Leistung erheblich steigern. Microsoft tut es für alle Standard-Framework-Assembly während der Installation (jetzt wissen Sie, warum die Installation so lange dauert). Paint.NET ist es auch (zur Startzeit ihrer App zu verbessern). die meisten von uns jedoch nicht funktionieren auf riesigen Gerüsten oder photoshop Konkurrenten, so die meiste Zeit, die Leistungsgewinne aus Anordnung mit in GAC minimal sind. Lohnt sich nicht einfach x-Kopie Bereitstellung Aufgeben.

  • Einige Entwickler könnten GAC verwenden, um sicherzustellen, dass Benutzer mit ausreichenden Berechtigungen können ihre Versammlungen nicht gelöscht oder geändert werden.

  • Für andere ist es für die Versions Gründe sein könnte, aber hier sollte man wirklich überdenken. Ich werde nicht wiederholen, was gesagt wurde, schon, können Sie hier warum .

Und vergessen Sie nicht, dass, wenn Sie in GAC bereitstellen möchten, Ihren Installateur Administratorrechte benötigen, können Sie ziemlich viel vergessen Klick einmal Bereitstellung, etc ...

Andere Tipps

Nützliche Fälle für GAC:

  • COM-Callable-Code - das heißt Sie einige non-.NET Code der Lage sein, den Sie zugreifen, ohne mit dlls Messing usw.
  • ServicedComponents (COM +)
  • Wenn Sie Code schreiben, der so häufig ist es wirklich sinnvoll ist, GAC zu verwenden - in erster Linie .NET Framework-Komponenten usw.
  • Wenn Sie NGEN Pre-JIT den Code verwenden möchten

Other than that, ich neige dazu, die GAC wie die Pest zu vermeiden. Es ist viel einfacher, nur den erforderlichen DLLs über robocopy etc mit Ihrer App bereitstellen; dies gibt Isolation und einfache Bereitstellung.

Wenn Sie die Installation von asp.net Web-Anwendungen und Sie sind der Eigentümer und haben die vollständige Kontrolle über die Maschine, dann in manchen Fällen kann es sinnvoll sein könnte Ihre Baugruppen setzen, die Sie planen, zu Aktie über Websites / Web-Instanzen im globalen Assembly-Cache.

Sie können dramatisch die anfängliche Ladezeit und Speicherverbrauch der Anwendung auf Servern verbessern, die viele mehrere Instanzen der gleichen ASP.NET-Anwendungen haben, wenn Sie die Assemblys im GAC setzen. Wenigstens habe ich diesen auf unseren Servern mit Dutzenden von Installationen.

Wenn Sie eine wiederverwendbare Bibliothek Versand sind aus mehreren Baugruppen, aber nur wenige von ihnen eine Fassade bilden, können Sie prüfen die Baugruppen in GAC installieren, wenn das Paket an Entwickler-PC installiert ist.

Stellen Sie sich vor, Sie versenden 6 Baugruppen und nur eine dieser 6 Baugruppen enthält eine Fassade - das heißt andere 5 nur selbst durch die Fassade verwendet werden. Sie versenden:

  • MyProduct.Facade.dll - das ist die einzige Komponente, sollte von Entwicklern verwendet werden
  • MyProduct.Core.dll - verwendet von MyProduct.Facade.dll, aber nicht von Entwicklern verwendet werden sollen
  • MyProduct.Component1.dll - das gleiche
  • MyProduct.Component2.dll - das gleiche
  • ThirdParty.Lib1.dll - Drittanbieter-Bibliothek, die von MyProduct.Component1.dll
  • ThirdParty.Lib2.dll - das gleiche
  • etc.

Entwickler Ihres Projekt möchte nur Referenz MyProduct.Facade.dll in ihren eigenen Projekten. Aber wenn ihr Projekt läuft, muss es in der Lage sein, alle Baugruppen laden es verweist - rekursiv. Wie kann dies erreicht werden? In der Regel müssen sie entweder in Bin-Ordner sein, auf in GAC:

  • Sie können die Entwickler fragen Sie Ihren Installationsordner und Fügen Sie Verweise auf alle N Baugruppen, die Sie dort setzen ausfindig zu machen. Dies wird sicherstellen, dass sie in Bin-Ordner kopiert werden werden in Laufzeit zur Verfügung stehen.
  • Sie können VS.NET Projektvorlage installieren bereits diese 6 Referenzen mit . Ein wenig komplex, da sollten Sie inject der tatsächliche Pfad zu Ihren Baugruppen in diese Vorlage vor seine Installation. Dies kann nur vom Installateur durchgeführt werden, da dieser Pfad auf Installationspfad ab.
  • Sie können Entwickler bitten, einen speziellen Post-Build-Schritt in CSPROJ erstellen / .vbproj Kopieren die notwendigen Abhängigkeiten zu Bin-Ordner-Datei. Die gleichen Nachteile.
  • Schließlich können Sie installieren alle Baugruppen in GAC . In diesem Fall müssen die Entwickler die Referenz nur auf MyProduct.Facade.dll von ihrem Projekt hinzufügen. Alles andere wird in der Laufzeit auf jeden Fall zur Verfügung.

Hinweis: letzte Option nicht machen Ihnen das gleiche tun, während das Projekt bis zur Produktion PC versenden. Sie können entweder alle Baugruppen innerhalb Bin-Ordner versenden, oder sie in GAC installieren - all alle Ihre Wunsch abhängt.

So beschrieben die Lösung zeigt den Vorteil des Setzens von Drittanbietern Baugruppen in GAC während der Entwicklung. Es ist nicht für die Produktion.

Wie Sie finden können, die Installation in GAC soll vor allem das Problem der Lage der erforderlichen Baugruppen (Abhängigkeiten) lösen. Wenn eine Assembly in GAC installiert ist, so kann es „in der Nähe“ jede Anwendung vorhanden ist. Es ist wie Pfad mit denen Sie Ihre PATH-Variable .exe, aber in "verwaltet Art und Weise" - natürlich ist dies eher vereinfachte Beschreibung;).

Hier ist der Link von Chris Sells genannt "Vermeiden Sie das GAC"

https://sellsbrothers.com/12503

Die Erklärung ziemlich lang ist, aber kurz gesagt, die beiden Fälle, die er identifiziert sind

  1. Fixing kritische Fehler, ohne die betroffenen Anwendungen zu berühren (und ohne etwas zu zerbrechen!)

  2. Gemeinsame Nutzung von Typen zur Laufzeit zwischen Baugruppen separat eingesetzt

Hinweis: Es ist eine sehr lange Diskussion am Ende Chris die Post , sehr schöne Liste Kommentare.

zuerst, wenn Sie diese auf einem Client-Rechner installieren, müssen Sie eine benutzerdefinierte Aktion hinzufügen, um die App im GAC und ein anderes zu installieren, wenn entfernen.

auf Fall A definitiv nicht GAC

auf Fall B, wenn Ihre Bibliothek ständig sein wird, ändert Sie jede Version der Assembly in den GAC immer und Aktualisierung dieser Versammlung tritt hinzufügen müssen

auf Fall C nebeneinander Ausführung ermöglicht es Ihnen, verschiedene Montagevarianten zu laufen und Sie brauchen nicht alles zu addieren, um die Versionen zu unterscheiden.

Wird nur verwendet, wenn Sie wirklich brauchen, um

Es macht nur Sinn im GAC zu installieren, wenn viele, viele Web-Anwendungen auf dem gleichen Server teilen werden genau die gleichen Bibliotheken. Zum Beispiel auf einem Sharepoint-Server kann es Hunderte von Web-Site, die alle brauchen den gleichen Web-Teil zu teilen, so dass in diesem Fall macht es Sinn, die kompilierte Webpart GAC bereitstellen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top