Freigeben über


Hosten und Bereitstellen von ASP.NET Core Blazor

Hinweis

Dies ist nicht die neueste Version dieses Artikels. Die aktuelle Version finden Sie in der .NET 10-Version dieses Artikels.

Warnung

Diese Version von ASP.NET Core wird nicht mehr unterstützt. Weitere Informationen finden Sie in der Supportrichtlinie für .NET und .NET Core. Informationen zum aktuellen Release finden Sie in der .NET 9-Version dieses Artikels.

In diesem Artikel wird erläutert, wie Sie Blazor-Apps hosten und bereitstellen.

Veröffentlichen der App

Apps werden für die Bereitstellung in Releasekonfigurationen veröffentlicht.

Hinweis

Veröffentlichen Sie eine gehostete Blazor WebAssembly-Projektmappe aus dem Server-Projekt.

  1. Wählen Sie den Befehl {APPLICATION} veröffentlichen aus dem Menü Build aus. (Der Platzhalter {APPLICATION} ist der Name der App.)
  2. Wählen Sie das Veröffentlichungsziel aus. Um lokal zu veröffentlichen, wählen Sie Ordner aus. Wählen Sie Weiteraus.
  3. Akzeptieren Sie beim lokalen Veröffentlichen den Standardordner, oder geben Sie einen anderen Ort an. Wählen Sie "Fertig stellen" aus, um das Profil zu speichern. Wählen Sie Schließen aus.
  4. Um den Veröffentlichungsordner des Ziels vor der Veröffentlichung der App zu bereinigen, wählen Sie "Alle Einstellungen anzeigen" aus. Wählen Sie "Einstellungen"">>" aus, um alle vorhandenen Dateien vor der Veröffentlichung zu löschen. Wählen Sie Speichern aus.
  5. Wählen Sie die Schaltfläche Veröffentlichen aus.

Das Veröffentlichen einer App löst eine Wiederherstellung der Abhängigkeiten des Projekts aus und erstellt das Projekt, bevor die Objekte für die Bereitstellung erstellt werden. Im Rahmen des Buildprozesses werden nicht verwendete Methoden und Assemblys entfernt, um die Downloadgröße und Ladezeiten von Apps zu reduzieren.

Leeren des Zielveröffentlichungsordners

Wenn Sie den dotnet publish Befehl in einer Befehlsshell zum Veröffentlichen einer App verwenden, generiert der Befehl die erforderlichen Dateien für die Bereitstellung basierend auf dem aktuellen Status des Projekts und platziert die Dateien in den angegebenen Ausgabeordner. Der Befehl bereinigt den Zielordner nicht automatisch, bevor die App veröffentlicht wird.

Um den Zielordner automatisch zu leeren, bevor die App veröffentlicht wird, fügen Sie das folgende MSBuild-Ziel zur Projektdatei der App (.csproj) unter dem Stammelement <Project> hinzu:

<Target Name="_RemovePublishDirBeforePublishing" BeforeTargets="BeforePublish">
  <RemoveDir Directories="$(PublishDir)" Condition="'$(PublishDir)' != ''" />
</Target>

Standardveröffentlichungsorte

  • Blazor Web App: Die App wird im Ordner /bin/Release/{TARGET FRAMEWORK}/publish veröffentlicht, in dem der Platzhalter {TARGET FRAMEWORK} das Zielframework ist. Stellen Sie die Inhalte des Ordners publish auf dem Host bereit.
  • Selbstständig Blazor WebAssembly: Die App wird im Ordner bin/Release/{TARGET FRAMEWORK}/publish oder bin/Release/{TARGET FRAMEWORK}/browser-wasm/publish veröffentlicht. Zum Bereitstellen der App als statische Website kopieren Sie den Inhalt des Ordners wwwroot auf den Host der statischen Website.
  • Blazor Server: Die App wird im Ordner /bin/Release/{TARGET FRAMEWORK}/publish veröffentlicht, in dem der Platzhalter {TARGET FRAMEWORK} das Zielframework ist. Stellen Sie die Inhalte des Ordners publish auf dem Host bereit.
  • Blazor WebAssembly
    • Eigenständig: Die App wird im /bin/Release/{TARGET FRAMEWORK}/publish oder bin/Release/{TARGET FRAMEWORK}/browser-wasm/publish Ordner veröffentlicht. Zum Bereitstellen der App als statische Website kopieren Sie den Inhalt des Ordners wwwroot auf den Host der statischen Website.
    • Gehostet: Der Server ASP.NET Core-App und die Client-App Blazor WebAssembly werden zusammen mit allen statischen Webressourcen der Client-App im /bin/Release/{TARGET FRAMEWORK}/publish Ordner der Server-App veröffentlicht. Stellen Sie die Inhalte des Ordners publish auf dem Host bereit.

IIS

Informationen zum Hosten einer Blazor-App in IIS finden Sie in den folgenden Ressourcen:

Das Freigeben eines App-Pools zwischen ASP.NET Core-Apps wird nicht unterstützt, auch nicht für Blazor-Apps. Verwenden Sie beim Hosten mit IIS einen App-Pool pro App, und vermeiden Sie die Verwendung der virtuellen IIS-Verzeichnisse zum Hosten mehrerer Apps.

Eine oder mehrere Blazor WebAssembly-Apps, die von einer ASP.NET Core-App gehostet werden, eine sog. gehostete Blazor WebAssembly-Lösung, werden für einen App-Pool unterstützt. Wir empfehlen jedoch nicht, einen einzelnen App-Pool mehreren gehosteten Blazor WebAssembly-Lösungen oder Szenarien mit dem Hosting untergeordneter Anwendungen zuzuweisen, und unterstützen dies auch nicht.

Weitere Informationen zu Lösungen finden Sie unter Tools für ASP.NET Core Blazor.

JavaScript-Bundlerunterstützung

Die Blazor Laufzeit basiert auf JavaScript-Dateien (JS), der .NET-Laufzeit, die in WebAssembly-Code kompiliert wurde, und verwalteten Assemblys, die als WebAssembly-Dateien verpackt sind. Wenn eine Blazor App erstellt wird, hängt die Blazor Laufzeit von diesen Dateien von verschiedenen Buildspeicherorten ab. Aufgrund dieser Einschränkung Blazorist die Buildausgabe nicht mit JS Bundlern wie Gulp, Webpack und Rollup kompatibel.

Um während JS mit Bundlern kompatible Buildausgabe zu erstellen, legen Sie die WasmBundlerFriendlyBootConfig MSBuild-Eigenschaft true in der Projektdatei der App fest:

<WasmBundlerFriendlyBootConfig>true</WasmBundlerFriendlyBootConfig>

Wichtig

Dieses Feature erzeugt beim Veröffentlichen der App nur die bundlerfreundliche Ausgabe.

Die Ausgabe kann nicht direkt im Browser ausgeführt werden, kann aber von JS Tools verwendet werden, um Dateien mit den restlichen vom Entwickler bereitgestellten Skripts zu bündeln JS .

Wenn WasmBundlerFriendlyBootConfig diese Option aktiviert ist, enthält die produzierte JS Datei import Direktiven für alle Ressourcen in der App, wodurch die Abhängigkeiten für den Bundler sichtbar sind. Viele der Ressourcen können vom Browser nicht geladen werden, aber Bundler können in der Regel so konfiguriert werden, dass sie die Ressourcen anhand ihres Dateityps erkennen, um das Laden zu verarbeiten. Ausführliche Informationen zum Konfigurieren Des Bundlers finden Sie in der Dokumentation des Bundlers.

Hinweis

Die Bündelung der Buildausgabe sollte durch Zuordnen von Importen zu einzelnen Dateispeicherorten mithilfe eines JS benutzerdefinierten Bundler-Plug-Ins möglich sein. Wir stellen derzeit kein solches Plug-In bereit.

Hinweis

Das Ersetzen des files Plug-Ins durch url, alle Dateien der App JS , einschließlich der Blazor-WebAssembly-Laufzeit (base64 codiert in der JS), werden in der Ausgabe gebündelt. Die Größe der Datei ist erheblich größer (z. B. 300% größer), als wenn die Dateien mit dem files Plug-In zusammengestellt werden. Daher wird die Verwendung des url Plug-Ins nicht als allgemeine Methode empfohlen, wenn sie eine bundlerfreundliche Ausgabe für JS die Bundlerverarbeitung erzeugen.

Die folgenden Beispiel-Apps basieren auf Rollup. Ähnliche Konzepte gelten bei verwendung anderer JS Bundler.

Demo-Beispiel-Apps für Blazor WebAssembly eine React-App (BlazorWebAssemblyReact) und .NET auf WebAssembly in einer React-App (DotNetWebAssemblyReact) für .NET 10 oder höher sind im Blazor Beispiel-GitHub-Repository (dotnet/blazor-samples)verfügbar.

Aspekte der Blazor WebAssembly Zwischenspeicherung gelten für Blazor Web Apps

Blazor Anleitungen zur Zwischenspeicherung und HTTP-Zwischenspeicherung im Blazor WebAssembly Knoten konzentrieren sich auf eigenständige Blazor WebAssembly Apps, aber mehrere Aspekte der clientseitigen Zwischenspeicherung in diesen Artikeln gelten auch für Blazor Web AppFeatures, die interaktive WebAssembly- oder interaktive Auto-Rendermodi übernehmen. Wenn bei einem Blazor Web App Rendering von Inhalten auf der Clientseite ein Problem mit statischen Asset- oder Bündel-Caching auftritt, lesen Sie die Anleitungen in den folgenden Artikeln, um das Problem zu beheben.

Blazor Server MapFallbackToPage Konfiguration

Dieser Abschnitt gilt nur für Blazor Server-Apps. MapFallbackToPage wird nicht in Blazor Web App- und Blazor WebAssembly -Apps unterstützt.

Falls eine App einen separaten Bereich mit benutzerdefinierten Ressourcen und Razor-Komponenten erfordert:

  • Erstellen Sie im Ordner Pages der App einen Ordner für die Ressourcen. Der Administratorbereich einer App wird beispielsweise in einem Ordner namens Admin (Pages/Admin) erstellt.

  • Erstellen Sie eine Stammseite (_Host.cshtml) für den Bereich. Erstellen Sie beispielsweise eine Pages/Admin/_Host.cshtml-Datei aus der Hauptstammseite der App (Pages/_Host.cshtml). Geben Sie auf der @page-Seite für Administrator*innen keine _Host-Anweisung an.

  • Fügen Sie dem Ordner des Bereichs ein Layout hinzu (z. B. Pages/Admin/_Layout.razor). Legen Sie das <base>-Tag href im Layout für den separaten Bereich so fest, dass es mit dem Ordner des Bereichs übereinstimmt (z. B. <base href="/Admin/" />). Fügen Sie zu Demonstrationszwecken ~/ zu den statischen Ressourcen auf der Seite hinzu. Zum Beispiel:

    • ~/css/bootstrap/bootstrap.min.css
    • ~/css/site.css
    • ~/BlazorSample.styles.css (der Namespace der Beispiel-App lautet BlazorSample)
    • ~/_framework/blazor.server.js (Blazor Script)
  • Wenn der Bereich über einen eigenen Ordner für statische Ressourcen verfügen soll, fügen Sie einen Ordner hinzu, und geben Sie dessen Speicherort in der Middleware für statische Dateien in Program.cs (z. B. app.UseStaticFiles("/Admin/wwwroot")) an.

  • Razor-Komponenten werden dem Ordner des Bereichs hinzugefügt. Fügen Sie dem Bereichsordner mindestens eine Index-Komponente mit der richtigen @page-Anweisung für den Bereich hinzu. Fügen Sie beispielsweise eine Pages/Admin/Index.razor-Datei hinzu, die auf der Pages/Index.razor-Standarddatei der App basiert. Geben Sie den Bereich Admin als Routenvorlage am Anfang der Datei an (@page "/admin"). Fügen Sie bei Bedarf zusätzliche Komponenten hinzu. Geben Sie beispielsweise Pages/Admin/Component1.razor mit einer @page-Anweisung und der Routenvorlage @page "/admin/component1 an.

  • Rufen Sie in Program.cs die Methode MapFallbackToPage für den Anforderungspfad des Bereichs unmittelbar vor dem Pfad der Fallbackstammseite auf die _Host-Seite auf:

    ...
    app.UseRouting();
    
    app.MapBlazorHub();
    app.MapFallbackToPage("~/Admin/{*clientroutes:nonfile}", "/Admin/_Host");
    app.MapFallbackToPage("/_Host");
    
    app.Run();