Aus dem Quellcode bauen#

Terminal öffnen und im richtigen Ordner arbeiten#

Die folgenden Befehle im integrierten VS-Code-Terminal oder einem selbst geöffneten PowerShell-/Linux-Terminal ausführen. Ein Buildfehler beendet dann nicht das Fenster. Ein roter Fehler ist kein erfolgreicher Build: erst die erste Fehlermeldung beheben, danach denselben Schritt erneut ausführen.

Das Terminal muss im Repositoryordner stehen, der global.json, ui und src enthält. Nicht im BlackICE-Spielserverordner und nicht in artifacts/web bauen.

cd "C:\Pfad\zum\blackice-server-panel"
git --version
dotnet --version
node --version
npm --version

Voraussetzungen: Git, .NET SDK 10.0.401, Node 24.19.0 und npm. Die SDK-Auswahl steht in global.json, npm-Versionen stehen in ui/package-lock.json. Releases enthalten die .NET-Laufzeit; Node und SDK werden nur zum Entwickeln benötigt.

Laufende Entwicklung stoppen#

Vor dem Ersetzen von artifacts im sichtbaren Startterminal Q wählen. Das stoppt den Spielserver, Webhost, Supervisor und Serverterminal geordnet. Ein laufender Vite-Devserver wird in seinem eigenen Terminal mit Strg+C beendet. Laufende Programme können unter Windows DLLs oder das native Rolldown-Buildmodul sperren.

Private Konfigurationen bleiben unter .local. Beim Bauen diese Dateien und den echten Serverordner nicht löschen.

Windows: Schritt für Schritt#

npm --prefix ui ci
npm --prefix ui run check
npm --prefix ui run build

dotnet build src/Supervisor -c Release
dotnet build src/Web -c Release

dotnet publish src/Supervisor -c Release -r win-x64 --self-contained true -o artifacts/supervisor
dotnet publish src/Web -c Release -r win-x64 --self-contained true -o artifacts/web

dotnet publish src/Supervisor -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -o .local/launcher
Copy-Item .local/launcher/Supervisor.exe Start.exe -Force
 # Keep the repository VERSION file beside Start.exe; match Directory.Build.props when changing the version.
Copy-Item licenses artifacts/web/wwwroot/licenses -Recurse -Force
.\Start.exe

Die UI-Buildausgabe liegt unter src/Web/wwwroot. dotnet build prüft und kompiliert C#, erstellt aber noch kein vollständiges Betriebspaket. dotnet publish erzeugt die Programme samt Laufzeit in artifacts. Der letzte Publish erzeugt die einzelne Startdatei; sie bleibt neben dem Ordner artifacts.

Jeden Schritt einzeln ausführen und auf seinen Erfolg warten. Nicht nach einem fehlgeschlagenen npm-Build mit einem alten UI-Artefakt weiter veröffentlichen.

Linux: Schritt für Schritt#

Referenz: Debian 13, x86-64. Erst Git, .NET SDK und Node installieren. Zusätzlich:

sudo apt install build-essential ca-certificates libicu76 libssl3t64 libstdc++6 zlib1g tmux
# Nur für eine grafische Desktopumgebung:
sudo apt install xterm
cd /pfad/zum/blackice-server-panel

npm --prefix ui ci
npm --prefix ui run check
npm --prefix ui run build
dotnet build src/Supervisor -c Release
dotnet build src/Web -c Release

dotnet publish src/Supervisor -c Release -r linux-x64 --self-contained true -o artifacts/supervisor
dotnet publish src/Web -c Release -r linux-x64 --self-contained true -o artifacts/web
cc -O2 -Wall -Wextra native/terminal.c -lutil -o artifacts/supervisor/replay-terminal

dotnet publish src/Supervisor -c Release -r linux-x64 --self-contained true -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -o .local/launcher
cp .local/launcher/Supervisor Start
chmod +x Start
cp -R licenses artifacts/web/wwwroot/
./Start

Der kleine C-Helfer erzeugt eine echte PTY für BlackICE. Für den Betrieb ist er im Release enthalten; zum lokalen Bau werden cc und libutil benötigt. Auf einem Desktop erscheint ein zusätzliches Serverterminal. Per SSH wird eine getrennte tmux-Sitzung verwendet; C im Startterminal hängt diese an. Mit Strg+B, danach D, zurück zum Steuerterminal wechseln. exit in der Serverkonsole stoppt den Server; Q im Steuerterminal beendet alles.

Docker bauen#

docker version
docker build -t replay-panel:local .

Docker muss laufen. Der mehrstufige Build baut UI, C#-Programme und PTY-Helfer im Image; auf dem Host werden dafür weder Node noch SDK benötigt. Für Betrieb und Volumes siehe Docker-Einrichtung. Webhost und Supervisor bleiben getrennte Container. Docker öffnet kein zusätzliches Serverfenster.

Tests#

dotnet run --project tests/Core.Tests
dotnet publish tests/ConsoleFixture -c Release -o .local/fixture
dotnet run --project tests/Backend.Tests -- .local/fixture
node scripts/test-panel.mjs
node scripts/test-setup.mjs

Die Fixturetests verwenden getrennte Ordner und Ports. Der Launcher-Test verlangt ein isoliertes Paket unter .local; niemals die echte Konfiguration damit überschreiben. Die CI baut Windows und Linux, prüft Launcher/Serverterminal und testet den echten offiziellen Download unter Linux/Docker.

Häufige Fehler#

Meldung Ursache und Vorgehen
MSB1003 / kein Projekt gefunden Projekt ausdrücklich angeben: dotnet build src/Web, im Repositoryordner arbeiten.
SDK nicht gefunden / NETSDK1045 Mit dotnet --list-sdks prüfen und SDK 10.0.401 installieren. Eine Laufzeit allein genügt zum Bauen nicht.
svelte-check oder vite fehlt Im Repository npm --prefix ui ci ausführen.
EPERM unlink ... rolldown ... .node Native Builddatei ist gesperrt. Den betreffenden Devserver/Editor-Language-Server stoppen. Bei Bedarf ui/node_modules innerhalb des Projekts als Sicherung verschieben und npm ci erneut ausführen. Keine fremden Node-Prozesse pauschal beenden.
MSB3027 / Datei wird verwendet Laufenden Stack mit Q stoppen oder in einen anderen Ausgabeordner veröffentlichen.
NU1301 / npm-Netzwerkfehler Verbindung, Proxy und Zertifikate prüfen; den Restore wiederholen. TLS-Prüfung nicht abschalten.
cc oder libutil fehlt build-essential installieren und den obigen Helper-Befehl ausführen.
Linux: Permission denied Programm ausführbar machen; Paket- und Zustandsordner müssen dem Dienstbenutzer zugänglich beziehungsweise beschreibbar sein.
Port 20772 belegt Bereits laufendes Panel verwenden oder dessen Startterminal geordnet beenden; nicht einfach einen zweiten Stack starten.
Start meldet fehlende Dateien Start muss neben artifacts liegen. Beide Programmpakete veröffentlichen.

Buildausgabe für eine Fehleranalyse behalten:

dotnet build src/Web -c Release 2>&1 | Tee-Object -FilePath build-web.log
dotnet build src/Web -c Release 2>&1 | tee build-web.log

Suchbegriff eingeben, um die Dokumentation zu durchsuchen.