Frage

Was als beste Praxis betrachtet wird, wenn es darum geht, Baugruppen und Veröffentlichungen?

Ich möchte in der Lage sein, mehrere Versionen derselben Bibliothek zu verweisen -. Lösung enthält mehrere Projekte, die auf unterschiedliche Versionen einer CommonUtils.dll Bibliothek hängen wir sie bauen

Wie alle Abhängigkeiten in dem ist / debug oder sind / Release kopiert werden, nur eine einzige Kopie von CommonUtils.dll kann es existieren trotz jedem der DLL-Dateien unterschiedliche Montageversionsnummern haben.

Sollte ich Versionsnummern in den Namen der Assembly mehrere Versionen einer Bibliothek verweisen zu können, oder gibt es einen anderen Weg?

War es hilfreich?

Lösung

Hier ist, was ich lebe von -

Es hängt davon ab, was Sie planen, die DLL-Dateien für die Verwendung. Ich kategorisieren sie in zwei Hauptgruppen:

  1. Sackgassen Baugruppen. Dies sind EXE-Dateien und DLL-Dateien, die Sie wirklich planen, nicht auf Referenzierung von überall. nennen diese nur schwach und stellen Sie sicher, dass Sie die Versionsnummern haben Sie in Source-Control markiert Release, so können Sie Rollback, wenn.

  2. referenzierten Assemblys. Starke Namen diese so können Sie mehrere Versionen davon haben durch andere Baugruppen verwiesen wird. Verwenden Sie den vollständigen Namen sie zu referenzieren (Assembly.Load). Halten Sie eine Kopie der neuesten und größten Version davon in einem Ort, an dem anderen Code kann es verweisen.

Als nächstes haben Sie die Wahl, ob lokal oder nicht Ihre Referenzen zu kopieren. Grundsätzlich kocht der Kompromiss bis - wollen Sie in Patches / Upgrades von Ihren Referenzen nehmen? Es kann davon ab, neue Funktionen, dass positiver Wert sein, aber auf der anderen Seite, könnte es zu brechen Veränderungen geben. Die Entscheidung, hier, glaube ich, soll auf einer Fall-zu-Fall-Basis durchgeführt werden.

Während in Visual Studio zu entwickeln, die standardmäßig werden Sie die neueste Version zu Compile mit, aber sobald die Referenzierung Assembly kompiliert wird die spezifische Version erfordert es mit kompiliert wurde.

Ihre letzte Entscheidung ist vor Ort oder nicht zu kopieren. Grundsätzlich, wenn Sie bereits über einen Mechanismus verfügen, die referenzierte Assembly, setzen Sie diese auf falsch einzusetzen.

Wenn Sie ein großes Release-Management-System planen, werden Sie wahrscheinlich viel mehr Gedanken zu bringen und die Fürsorge, in diesen. Für mich (kleines Geschäft - zwei Personen), das funktioniert gut. Wir wissen, was los ist, und nicht das Gefühl, zurückhaltend von mit die Dinge in einer Art und Weise zu tun, die keinen Sinn macht.

Wenn Sie Laufzeit erreichen, Assembly.Load Sie, was Sie wollen in die Anwendungsdomäne rel="nofollow. Dann können Sie Assembly.GetType verwenden Sie den gewünschten Typ zu erreichen. Wenn Sie einen Typ haben, die in mehreren geladenen Baugruppen (wie in mehreren Versionen desselben Projekts) vorhanden ist, können Sie eine AmbiguousMatchException Ausnahme. Um das zu beheben, müssen Sie den Typen aus einer Instanz einer Baugruppe Variable bekommen, nicht die statische Assembly.GetType Methode.

Andere Tipps

Baugruppen können im GAC (Global Assembly Cache) koexistieren, auch wenn sie den gleichen Namen gegeben haben, dass die Version unterscheidet. Dies ist, wie .NET Framework-Assemblys Arbeit geliefert. Eine Anforderung, die um für eine Baugruppe werden erfüllen müssen in der Lage sein registriert sein GAC unterzeichnet werden soll.

Version Hinzufügen von Zahlen auf den Namen der Versammlung besiegt nur den ganzen Zweck der Versammlung Ökosystems und ist umständlich IMHO. Um zu wissen, welche Version eines bestimmten Montage Ich habe nur öffnen Sie das Fenster Eigenschaften und überprüfen Sie die Version.

Geben verschiedene Namen zu verschiedenen Montagevarianten ist der einfachste Weg und sicher funktioniert.

Wenn Ihre Assembly (CommonUtils.dll) sind mit starken Namen (dh unterzeichnet), können Sie darüber nachdenken, es im GAC (Global Assembly Cache Installation - können Sie verschiedene Versionen der gleichen Baugruppe Seite an Seite in der Installation GAC), deshalb ist die aufrufende Anwendung wird automatisch die richtige Version von dort, weil .NET-Typen Montage Versionsinformationen enthalten.

In Ihrem VS Projekt verweisen Sie die richtige Version der Bibliothek, aber Sie stellen Sie sie nicht im Anwendungsordner; Sie installieren es im GAC statt (während der Installation des Programms).

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