Creating an OrchardCore .NET Core Project From Scratch - Part 1

In this guide we will setup an custom Orchard Core CMS Web Project

Posted by cho on June 16, 2019

Setup OrchardCore CMS Project

In dieser Schritt fuer Schritt Anleitung werden wir ein eigenes OrchardCore CMS Web Projekt erstellen.

Es gibt verschiedene Moeglichkeiten, eine eigene OrchardCore CMS Website zu erstellen: Zum Beispiel via Nuget Package Referenz, ein starter projekt mittels dotnet new Code Generation Template oder in der Solution den Source Code von OrchardCore Git einbetten.

Da wir auf 'The Bleeding Edge' stehen und immer den neuesten Shit haben wollen, binden wir OrchardCore selbstverstaendlich from Source ein: als Git Submodule. Man koennte das OrchardCore Projekt und das eigene WebProjekt auch als Nested Git Repository einbinden, aber dann haben wir spaeter Probleme mit dem Aufsetzen von Jenkins CI, da die Refernzen auf OrchardCore nicht vorhanden waeren. Ausserdem finde ich Git-Submodule irgendwie sauberer.

Das hat auch den Vorteil, dass wir jederzeit die Quelldateien einsehen koennen, bequem debuggen koennen und vor Allem: Wir koennen (falls gewuenscht) Anpassungen an OrchardCore selbst vornehmen, an unsere Beduerfnisse anpassen und uns ggf. sogar an der Entwicklung, Verbesserung am CMS mittels Pull Requests beteiligen.

Voraussetzung

was wir dazu benoetigen:

  • .NET Core SDK (Linux, Windows oder macOS)
  • git
  • GitHub Account fuer den Fork

Wir legen jetzt los, indem wir zunaechst unseren Projektfolder anlegen, in diesem Beispiel mit dem kreativen Namen "CustomOrchardCore" und legen in diesem Verzeichnis ein neues Git Repository an:

> mkdir CustomOrchardCore
> cd CustomOrchardCore/
> git init

Nun erstellen wir auf GitHub einen Fork von OrchardCore, hierzu ist eine Anmeldung an GitHub notwendig.

Wir gehen auf die Projektseite von OrchardCore und klicken den Fork Button:

Jetzt haben wir einen persoenlichen Fork von OrchardCore, in den wir comitten koennen. Diesen Fork binden wir nun als Submodule in unser Repository ein, hierzu kopieren wir die Git-Url von unserem Fork:

im Root-Projektverzeichnis fuegen wir das OrchardCore Submodule hinzu:

> git submodule add https://github.com/<YOUR-ACCOUNT>/OrchardCore.git

und fuegen fuer unseren eigenen SourceCode ein neues Verzeichnis an

> mkdir src

jetzt sollte unser Projekt-Folder so aussehen:

> ls -la
drwxrwxr-x  5 cho cho 4096 Jun 16 15:29 .
drwxr-xr-x 86 cho cho 4096 Jun 16 14:51 ..
drwxrwxr-x  8 cho cho 4096 Jun 16 15:28 .git
-rw-rw-r--  1 cho cho   97 Jun 16 15:28 .gitmodules
drwxrwxr-x  5 cho cho 4096 Jun 16 15:28 OrchardCore
drwxrwxr-x  3 cho cho 4096 Jun 16 15:30 src

Nun erstellen wir eine neue, leere Solution im src Verzeichnis {Projekfolder}/src/{SolutionName}, ich habe hier Rider verwendet, es geht aber auch mit jeder anderen .Net core IDE. Man koennte theoretisch auch ein eigenes sln file im texteditor anlegen. Bei mir heisst es "Cho.CustomOrchardCore.sln" und bekommt einen eigenen neuen Folder.

nun kopieren wir das OrchardCore CMS Web-Projekt als Vorlage in unseren neuen Src-Folder, unser eigenes Web-Projekt:

cp -R OrchardCore/src/OrchardCore.Cms.Web/ src/Cho.CustomOrchardCore/

Jetzt oeffnen wir die neue Solution in der IDE unserer Wahl und fuegen das neue, kopierte Web-Projekt der Solution hinzu:

Und nun muessen wir uns um die broken References kuemmern, da wir das Web-Projekt ja kopiert hatten, sind die Pfade nicht mehr korrekt:

z.B. statt: ..\OrchardCore.Build\Dependencies.props

muss es in meinem Fall lauten: ..\..\..\OrchardCore\src\OrchardCore.Build\Dependencies.props

Das habe ich mit einem Text-Editor mit Find And Replace korrigiert: In der Projekt-Datei OrchardCore.Cms.Web.csproj einfach die Pfade ersetzen, bei mir z.B.:

  • Find:"..\"
  • Replace: "..\..\..\OrchardCore\src\"

nun noch den Port aendern, da auf meinem Server der 5001 schon belegt ist:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
           WebHost.CreateDefaultBuilder<Startup>(args)
               .UseNLogWeb()
               .UseUrls("http://localhost:5100");

und ein dotnet run im Web-Projekt-Verzeichnis ausfuehren:

dann einen publish ausfuehren und den Folder via rsync auf den Server syncen, je nach Bedarf.

dotnet publish -c release -r <e.g. ubuntu.16.04-x64>

Nun sind wir mit unserem Custom OrchardCore CMS fast fertig, nur noch das Webprojet umbenennen und den Namespace anpassen, dann koennen wir mit der Entwicklung starten :-)

Bevor wir nun committen muessen wir allerdings noch ein .gitignore file anlegen, praktischerweise kopieren wir einfach das .gitignore vom OrchardCore Source-Folder, das hat soweit gute Excludes:

cp OrchardCore/.gitignore src/

Coming Soon

sobald unser Projekt fehlerfrei gebaut wird und wir alles sauber in unser eigenes Git Repository eingecheckt haben, kuemmern wir uns um das automatisierte Deployment auf unseren Server:

  • dotnet publish -c release -r <e.g. ubuntu.16.04-x64>
  • Setup Kestrel und Nginx
  • Jenkins CI Automation server Anbindung MultiBranch-Pipeline

Links

Try OrchardCore

OrchardCore Sources

OrchardCore Documentation