5

Wir haben eine Bibliothek in C# entwickelt, und jetzt möchte ich eine Projektvorlage erstellen, um die korrekte Verwendung der Bibliothek zu erleichtern.Was ist der beste Weg, Verweise auf meine eigenen Assemblies in eine Projektvorlage einzufügen?

Ich möchte, dass neue Projekte einen Verweis auf die Bibliotheksassembly enthalten. Sie möchten jedoch die Assembly nicht im GAC bereitstellen oder von der Assembly abhängen, die sich an einem bestimmten Speicherort befindet.

Was ich denke ist, die .dll in die ZIP-Datei Projektvorlage aufzunehmen. Das bedeutet, dass es irgendwo im Projektordner neuer Projekte landet. Vielleicht in einem Ordner namens Lib. Dann kann der Referenzhinweis in der Projektdatei auf diesen Ordner verweisen. Ist das eine gute Idee? Mit welchen Problemen könnte ich auf dem Weg stehen?

Gibt es vielleicht einen Mechanismus zum Einbinden solcher Bibliotheken von Drittanbietern in Projektvorlagen, die mir nicht bekannt sind? Wie hast du das angepackt? Sicher bin ich nicht der Erste.

+0

Die Antwort hängt davon ab, wie Sie Ihre Vorlagen bereitstellen möchten. Benutzt du VSIX? Verwenden Sie MSI (Windows Installer) oder eine andere universelle Bereitstellungstechnologie? Wollten Sie nur die Zip-Datei verteilen und manuelle Installationsanweisungen bereitstellen? –

Antwort

3

Ich musste dieses Problem in der Vergangenheit beheben. In einem Fall war es eine Protokollierungsbibliothek, die auf dem GAC installiert wurde, was bedeutete, dass das Referenzelement einfach den Assemblynamen benötigte. In einem anderen Fall installierten wir die Bibliothek im Dateisystem, erstellten einen Registrierungsschlüssel, der den Speicherort enthielt (falls der Benutzer niedlich wurde und änderten den Installationsort auf uns) und verwendeten einen project template wizard, um den Registrierungsschlüssel nachzuschlagen und einen Ersatz zu füllen Objekt, um den richtigen Ort im HintPath der Referenz zu haben. (Hinweis: Der Ansatz des Vorlagenassistenten erfordert, dass Sie die Assembly des Assistenten auf dem GAC installieren, was sich so anhört, als wollten Sie vermeiden ...)

Wenn Sie nicht möchten, dass Ihre Bibliothek entweder in der GAC oder ein bestimmter Standort, der Ansatz, die Assembly in das Projekt aufzunehmen, ist so gut wie Ihre einzige verbleibende Option. Positiv ist zu vermerken, dass die Bereitstellung Ihrer Projektvorlage relativ unkompliziert ist und Sie nicht mit dem GAC, benutzerdefinierten Assistenten usw. herumhantieren müssen. Wenn Sie jemals eine neue Revision Ihrer Bibliothek erstellen, müssen Ihre Benutzer dies tun um die Bibliothek jedes Projekts zu aktualisieren.

+0

Welche Auswirkungen hat die Installation auf den GAC? Was sind die Gründe, es zu vermeiden? –

+1

Die primäre Implikation ist, dass die Kopie der Assembly, die auf dem GAC installiert ist, "gewinnt". Das heißt, Sie haben möglicherweise eine aktualisierte Kopie im Ordner Ihrer App, aber solange der starke Name übereinstimmt, lädt die Laufzeit vorzugsweise die Kopie aus dem GAC. Ein ungefähr analoges Beispiel wäre, als wäre der Pfad der GAC'-Assembly der erste Eintrag in Ihrer PATH-Variablen und Sie haben einen LoadLibrary-Aufruf ausgegeben. Dies kann zu einem seltsamen Verhalten führen, wenn Sie versuchen, Ihre Binärdateien zu aktualisieren, und das Verhalten ändert sich auf mysteriöse Weise nicht. –

+1

Auch wenn dies nicht direkt ein GAC-Problem ist, bedeutet die Verwendung von starken Namen, dass Ihre Assembly jetzt eine Assembly benötigt, die dem starken Namen entspricht, mit dem sie kompiliert wurde. Sie müssen entweder eine Herausgeberrichtlinie neu kompilieren oder registrieren, die Bindungen an eine neuere Version umleitet. –

Verwandte Themen