Stonehenge 4

Open Source · MIT-Lizenz · .NET 8 und .NET 10

Web-Oberflächen für .NET-Anwendungen – nur mit C# und HTML

Stonehenge ist ein Open-Source-Framework für .NET nach dem MVVM-Muster. Sie schreiben ViewModels in C# und Views in HTML; Datenbindung, Aktionen und Live-Updates erledigt Stonehenge. Dieselbe Anwendung läuft als Desktop-Fenster oder als Web-App im Browser.

app/start.html

<!--ViewModel:StartVm-->
<div>
    <p>Hallo von {{ComputerName}}!</p>
    <p>Geklickt: {{CountPressed}}</p>

    <button class="btn btn-primary"
            @click="ButtonPressed()">
        Klick mich
    </button>
</div>

ViewModels/StartVm.cs

public class StartVm : ActiveViewModel
{
    public string ComputerName => Environment.MachineName;

    public int CountPressed { get; private set; }

    [ActionMethod]
    public void ButtonPressed()
    {
        CountPressed++;
    }
}

Hallo Stonehenge Start

Hallo von WERKSTATT-PC!

Geklickt: 3

So sieht es im Browser aus (nachgestellt)
in Entwicklung seit
2013
Lizenz, auch kommerziell frei
MIT
unterstützte .NET-Versionen
.NET 10 · 8
Betriebssysteme: Windows, Linux, macOS
3

Warum Stonehenge

Die Oberfläche im Browser, die Logik in C#

Stonehenge verbindet bewährte Web-Technik mit dem MVVM-Muster, das .NET-Entwickler kennen. Kein eigener Client-Code nötig, keine API von Hand.

  • Ein Code für Desktop und Web

    Die Anwendung öffnet sich in einem eigenen Fenster des installierten Browsers – Chrome, Edge, Brave, Firefox oder Safari – oder läuft als Web-Server für viele Nutzer.

  • Keine API von Hand

    Öffentliche Properties und mit [ActionMethod] markierte Methoden sind automatisch an die View gebunden. Kein REST-Controller, kein Client-Proxy, kein JSON-Mapping.

  • Live-Updates vom Server

    Server-Sent Events oder Polling: Ändert sich ein Wert im ViewModel, sieht der Browser es sofort. Ein Update-Timer liefert Messwerte und Status im Takt.

  • Anmeldung eingebaut

    Basic Auth mit .htpasswd-Datei (bcrypt, Apache MD5, SHA), NTLM unter Windows und Keycloak – jeweils mit einer Host-Option.

  • Mehrsprachig, mit Themes

    Texte aus .resx-Ressourcen, die Sprache auf Wunsch aus dem Browser. Themes als CSS-Dateien, wählbar auch über die Subdomain.

  • Kestrel, IIS oder Reverse-Proxy

    Selbst gehostet mit Kestrel oder hinter IIS; Basispfad und X-Forwarded-Header werden berücksichtigt. Sitzungen ganz ohne Cookies.

So funktioniert es

MVVM über die Leitung

Jede Seite besteht aus einer HTML-View und einem C#-ViewModel mit passendem Namen. Stonehenge liefert die View aus, hält das ViewModel je Sitzung auf dem Server und gleicht beide automatisch ab.

View

HTML mit Vue.js-2-Vorlagen und Bootstrap 5: {{Bindung}}, @click, v-for

Stonehenge

Sitzung, Datenbindung, Aktionen, Server-Push per SSE oder Polling

ViewModel

C#-Klasse, abgeleitet von ActiveViewModel: Properties und [ActionMethod]

Schnellstart

In drei Schritten zur ersten Anwendung

Voraussetzung ist das .NET SDK 8 oder 10. Wichtig: Das Projekt nutzt das SDK Microsoft.NET.Sdk.Web – die Vorlage „web“ legt es so an.

  1. Projekt anlegen, Paket hinzufügen

    Ein leeres Web-Projekt anlegen und das NuGet-Paket IctBaden.Stonehenge4 hinzufügen. Damit die Views mit ausgeliefert werden, kommt der Ordner app in die Projektdatei.

    Terminal

    dotnet new web -n HalloStonehenge
    cd HalloStonehenge
    dotnet add package IctBaden.Stonehenge4

    *.csproj

    <ItemGroup>
      <Content Include="app\**\*">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </Content>
    </ItemGroup>
  2. Server starten

    Program.cs wählt Vue.js als Client-Framework und Kestrel als Host. HostWindow öffnet die Anwendung als Desktop-Fenster; für den Betrieb als Web-Server wartet das Programm stattdessen auf Strg+C.

    Program.cs

    using IctBaden.Stonehenge.Hosting;
    using IctBaden.Stonehenge.Kestrel;
    using IctBaden.Stonehenge.Resources;
    using IctBaden.Stonehenge.Vue;
    
    using var loggerFactory = LoggerFactory.Create(b => b.AddConsole());
    var logger = loggerFactory.CreateLogger("stonehenge");
    
    var options = new StonehengeHostOptions
    {
        Title = "Hallo Stonehenge",
        ServerPushMode = ServerPushModes.ServerSentEvents
    };
    
    var vue = new VueResourceProvider(logger);
    var loader = StonehengeResourceLoader.CreateDefaultLoader(logger, vue);
    var host = new KestrelHost(loader, options);
    if (!host.Start("localhost", 32000)) return 1;
    
    // Als Desktop-Anwendung: eigenes Fenster, Ende beim Schließen
    using var window = new HostWindow(logger, host.BaseUrl, options.Title);
    window.Open();
    
    host.Terminate();
    return 0;
  3. View und ViewModel schreiben

    Zur View app/start.html gehört per Konvention die Klasse StartVm. Danach dotnet run – die Anwendung läuft unter http://localhost:32000.

    app/start.html

    <!--ViewModel:StartVm-->
    <div>
        <p>Hallo von {{ComputerName}}!</p>
        <p>Geklickt: {{CountPressed}}</p>
    
        <button class="btn btn-primary"
                @click="ButtonPressed()">
            Klick mich
        </button>
    </div>

    ViewModels/StartVm.cs

    public class StartVm : ActiveViewModel
    {
        public string ComputerName => Environment.MachineName;
    
        public int CountPressed { get; private set; }
    
        [ActionMethod]
        public void ButtonPressed()
        {
            CountPressed++;
        }
    }

Mehr in der Anleitung „Getting started“ und in der Referenz im Repository. Zur Anleitung (externer Link)

Bausteine

Fertige Komponenten für Anwendungen im Betrieb

Das NuGet-Paket enthält neben dem Kern Erweiterungen für typische Aufgaben in Fach- und Industrieanwendungen.

  • TreeView

    Baumansicht für Hierarchien wie Anlagen, Ordner oder Gerätegruppen.

  • Forms

    Editierbare Auswahlliste, Datumsauswahl, Splitter und Fehlermeldungen.

  • Charts

    Diagramme auf Basis von C3: Linien, Balken, Torten, Gauges und Sankey.

  • Mermaid

    Fluss-, Ablauf- und Zustandsdiagramme aus Text.

  • SyntaxHighlight

    Editor mit Syntaxhervorhebung für C#-Quelltext.

  • AppDialog

    Modale Dialoge und Meldungsfenster, gesteuert aus dem ViewModel.

Eigene Komponenten

Wiederverwendbare Bausteine bestehen aus einer HTML-Datei und einer von StonehengeComponent abgeleiteten Klasse. Der Dateiname wird zum HTML-Tag.

app/computer-info.html

<!--CustomElement:model-->
<!--ViewModel:ComputerInfo-->
<div class="card">
    <p>{{model.Name}}</p>
</div>

ComputerInfo.cs

public class ComputerInfo : StonehengeComponent
{
    public string Name => Environment.MachineName;
}

app/start.html

<computer-info :model="Info"></computer-info>

KI-fähig

Vorbereitet für KI-Coding-Assistenten

Im Repository liegt eine Integrationsanleitung für KI-Coding-Agenten: Konventionen, Dateilayout, Pflichtmuster und typische Fehlerquellen. Als AGENTS.md ins eigene Projekt kopiert, schreibt der Assistent Stonehenge-Code nach den Regeln des Frameworks.

Integrationsanleitung lesen (externer Link)

Technik

Bewährter Stack, seit 2013 gepflegt

  • .NET 10 und .NET 8
  • Kestrel
  • IIS
  • Vue.js 2
  • Bootstrap 5
  • Font Awesome 6
  • System.Text.Json
  • Server-Sent Events

Vier Generationen

  1. Version 1

    .NET Framework

    ServiceStack und Knockout

  2. Version 2

    .NET Framework

    Katana und Aurelia

  3. Version 3

    .NET Core 3.1

    Kestrel, Aurelia, dann Vue.js

  4. Version 4

    .NET 8 und .NET 10

    Kestrel oder IIS, Vue.js 2, ohne Cookies

Versionshistorie (externer Link)

Häufige Fragen

Was ist Stonehenge 4?

Ein Open-Source-Framework für .NET, mit dem Anwendungen eine Web-Oberfläche nach dem MVVM-Muster bekommen: ViewModels in C#, Views in HTML. Die Anwendung läuft als Desktop-Fenster oder als Web-App.

Ist Stonehenge kostenlos?

Ja. Stonehenge steht unter der MIT-Lizenz und darf auch kommerziell frei verwendet werden. Unterstützung beim Einstieg, Erweiterungen und Entwicklung im Auftrag bietet ICT Baden auf Anfrage an.

Welche .NET-Versionen werden unterstützt?

.NET 10 mit Paketversion 10.x und .NET 8 mit Paketversion 8.8.x. Das Projekt muss das SDK Microsoft.NET.Sdk.Web verwenden; .NET Framework wird von Version 4 nicht mehr unterstützt.

Brauche ich JavaScript-Kenntnisse?

Nein. Views sind HTML mit der Vorlagensyntax von Vue.js 2 – zum Beispiel {{Name}}, @click und v-for. Den JavaScript-Teil liefert Stonehenge selbst aus; eigene Skripte sind möglich, aber nicht nötig.

Läuft Stonehenge als Desktop-Anwendung?

Ja. HostWindow öffnet die Anwendung in einem eigenen Fenster eines installierten Browsers, etwa Chrome, Edge, Brave, Firefox oder Safari. Dieselbe Anwendung kann auch als Web-Server für viele Nutzer laufen.

Warum Vue.js 2 und nicht Vue 3?

Die genutzten Bootstrap-Vue-Komponenten unterstützen Vue 3 noch nicht. Stonehenge bleibt deshalb bei Vue.js 2 und Bootstrap 5.

Kontakt

Stonehenge im eigenen Projekt?

Wir helfen beim Einstieg, entwickeln Erweiterungen oder ganze Anwendungen mit Stonehenge – und beantworten Fragen zum Framework.

info@ict-baden.de +49 172-7207196

Seboldstraße 9, 76227 Karlsruhe · Anfahrtsbeschreibung (PDF)