Navigation and service panel


Content

This text is fallbacked from the German Version. If you need use Google Translate


Sitecore Module als NuGet Package

By Kevin Brechbühl on 20. September 2013, No comments

Mit NuGet lassen sich Module/Libraries etc. einfach in eine .NET Solution installieren. Sitecore Module haben oft zusätzliche Sitecore Items, welche während der Installation eines Moduls in die Datenbank gelangen müssen. Mit NuGet Boardmitteln ist dies nicht einfach möglich, dieser Beitrag zeigt wie es trotzdem gemacht werden kann.

Ausgangslage

NuGet ist der Package Manager für die Microsoft Entwicklungsplattform mit .NET. Beiträge über wieso man einen solchen verwenden sollte, gibt es bei Google zu Hauf. Wir haben nun schon verschiedene Sitecore Module entwickelt, allerdings haben wir noch keines dieser in der NuGet Gallery veröffentlich. Vor einiger Zeit habe ich mit dem Sitecore Item Versioner ein kleines Modul geschrieben, um alle Sprachversionen für ein Item mit einem Klick zu erstellen. Schon lange wollte ich mich dransetzen um dieses auf NuGet zu publizieren. Diese Woche konnte ich dies umsetzen und zum Schluss das Modul erfolgreich publizieren.

Ich wusste, dass es bereits Möglichkeiten gibt, Sitecore Module als NuGet Packages zu veröffentlicht. Wie bereits in der Einleitung erwähnt ist das Hauptproblem dabei vor allem die Sitecore Items, welche bei der Installation mitinstalliert werden sollten. Die beliebteste ist wohl Sitecore.NuGet und ist ein Teil von Sitecore Rocks. Diese Möglichkeit basiert auf und ist somit abhängig von Sitecore Rocks. Obwohl ich Sitecore Rocks mag, wollte ich diese Abhängigkeit eigentlich nicht schaffen.

Ideen

Es gibt in meinen Augen verschiedene Varianten das Problem ohne Sitecore Rocks zu lösen:

  1. Ein Installation Script welches direkt auf die Datenbank zugreift und die Items erstellt. Schlechte Idee: Es wird quasi ein Teil der Sitecore API nachgebaut, bei Updates ist womöglich wieder alles anders und funktioniert nicht mehr. Zudem ist die Umsetzung nicht sehr trivial.
  2. Es wird mit Item Serialization gearbeitet: Beim Installieren werden die Items über die Sitecore API deserialisiert und so in die Datenbank importiert. Allerdings ist auch dies etwas schwierig, da während der NuGet Installation kein Sitecore Context vorhanden ist. Zudem bräuchte es dafür die Sitecore Assemblies direkt im NuGet Package, was wir ja auch nicht wollen/dürfen.
  3. Es wird wiederum mit Serialization gearbeitet: Bei der Installation werden die serialisierten Items in den App_Data Order kopiert. Via WebActivatorEx wird anschliessend beim Application Start über die Sitecore API die Deserialisierung angestossen. Auch dies bringt einiges an Problemen mit sich. Hauptsächlich dieses, dass die Sitecore API nicht so flexibel ist um Items aus einem beliebigen Order zu deserialisieren (nur aus dem konfigurierten Order aus dem web.config Setting SerializationFolder). Ich müsste also wiederum ein Teil der API neu schreiben. Dies hat z.B. der Entwickler von Unicorn bereits gemacht, allerdings konnte auch dieses Modul nicht einfach dafür verwendet werden. Hinzu kommen viele Fragen wie die Synchronisation der Items, die Installation bei mehreren Entwicklern etc.

Ich kam zum Schluss, dass es wohl doch nicht sehr viel Sinn macht hier eine eigene Umsetzung zu suchen. Somit fokussierte ich mich auf die Umsetzung mit Sitecore.NuGet. Dies ist dann wiederum sehr einfach.

Package erstellen

Ethan Truong hat in seinem Blogbeitrag eigentlich schon alles gesagt. Ich möchte diesen nicht wiederholen, vielmehr die wichtigesten Teile zusammenfassen. Er hat ein Git Repository erstellt, um das Skeleton für ein Sitecore NuGet Package zu erstellen. Als erstes clonen wir somit dieses Repository:

git clone git://github.com/etruong42/Sitecore.NuGet.Skeleton.git


Anschliessend sollten alle README.me Dateien aus allen Ordnern gelöscht werden (nach dem Lesen dieser, vielleicht :)). Nun können die relevanten Ordner gefüllt werden:

  • /content: Funktioniert wie der normale NuGet Content-Ordner. Dieses Ordner darf nicht leer sein, da sonst die Sitecore.NuGet Integration nicht funktioniert. Es wird empfohlen hier mindestens das Sitecore Package einzufügen, damit das Modul allenfalls auch über den Installation Wizard installiert werden kann.
  • /serialization: Hier kommen alle serialisierten Item rein, welche später in Sitecore installiert werden sollen.
  • /wwwroot: In diesem Ordner könnten Assemblies und andere Server Files abgelegt werden. Ich bevorzuge hierfür den NuGet Standard "lib" Ordner und habe den "wwwroot" gelöscht.

Anschliessend wird noch das *.nuspec File ausgefüllt (z.B. mit dem NuGet Package Explorer) und das Package ist fertig.

Package installieren

Zum Installieren sind nun zwei Schritte notwendig. Als erstes sollte das Visual Studio Projekt, in welches das Modul installiert werden soll (üblicherweise das Website-Projekt) mit einer Sitecore Rocks Verbindung konfiguriert werden. Dies machen wir mit einem Rechtsklick auf das Projekt -> Sitecore -> Connect. Dann wird entweder eine vorhandene Verbindung ausgewählt oder eine neue erstellt.

Wurde die Verbindung hergestellt kann das NuGet Package wie gewöhnlich installiert werden. Voilà.

No comments

Add your comment

Your email address will not be published. Required fields are marked *

*