Delen via


ASP.NET Core-Blazor hosten en implementeren

Notitie

Dit is niet de nieuwste versie van dit artikel. Zie de .NET 9-versie van dit artikelvoor de huidige release.

Waarschuwing

Deze versie van ASP.NET Core wordt niet meer ondersteund. Zie de .NET- en .NET Core-ondersteuningsbeleidvoor meer informatie. Zie de .NET 9-versie van dit artikelvoor de huidige release.

Belangrijk

Deze informatie heeft betrekking op een pre-releaseproduct dat aanzienlijk kan worden gewijzigd voordat het commercieel wordt uitgebracht. Microsoft geeft geen garanties, uitdrukkelijk of impliciet, met betrekking tot de informatie die hier wordt verstrekt.

Zie de .NET 9-versie van dit artikelvoor de huidige release.

In dit artikel wordt uitgelegd hoe u Blazor apps host en implementeert.

De app publiceren

Apps worden gepubliceerd voor implementatie in de releaseconfiguratie.

Notitie

Publiceer een gehoste Blazor WebAssembly-oplossing vanuit het Server project.

  1. Selecteer de opdracht Publish in het menu Build, waarbij de {APPLICATION} tijdelijke aanduiding staat voor de naam van de app.
  2. Selecteer het publicatiedoel. Als u lokaal wilt publiceren, selecteert u Map. Kies Volgende.
  3. Wanneer u lokaal publiceert, accepteert u de standaardmaplocatie of geeft u een andere locatie op. Selecteer Voltooien om het profiel op te slaan. Selecteer Sluitaf.
  4. Als u de publicatiemap van het doel wilt opschonen voordat u de app publiceert, selecteert u Alle instellingen weergeven. Selecteer Instellingen>Publiceermogelijkheden voor bestanden>Verwijder alle bestaande bestanden voordat u publiceert. Selecteer Opslaan.
  5. Selecteer de knop Publiceren.

Als u de app publiceert, wordt een herstel van de afhankelijkheden van het project geactiveerd en het project bouwt voordat u de assets voor implementatie maakt. Als onderdeel van het buildproces worden ongebruikte methoden en assembly's verwijderd om de downloadgrootte en laadtijden van apps te verminderen.

De doelpublicatiemap leegmaken

Wanneer u de dotnet publish opdracht in een opdrachtshell gebruikt om een app te publiceren, genereert de opdracht de benodigde bestanden voor implementatie op basis van de huidige status van het project en plaatst u de bestanden in de opgegeven uitvoermap. De opdracht maakt de doelmap niet automatisch schoon voordat de app wordt gepubliceerd.

Als u de doelmap automatisch wilt leegmaken voordat de app wordt gepubliceerd, voegt u het volgende MSBuild-doel toe aan het projectbestand van de app (.csproj) onder het hoofdelement <Project> :

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

Standaardpubliceerlocaties

  • Blazor Web App: de app wordt gepubliceerd in de map /bin/Release/{TARGET FRAMEWORK}/publish, waarbij de tijdelijke aanduiding {TARGET FRAMEWORK} het doelframework is. Implementeer de inhoud van de map publish op de host.
  • ZelfstandigBlazor WebAssembly: De app wordt gepubliceerd in de bin/Release/{TARGET FRAMEWORK}/publish-map of de bin/Release/{TARGET FRAMEWORK}/browser-wasm/publish-map. Als u de app wilt implementeren als een statische site, kopieert u de inhoud van de map wwwroot naar de statische sitehost.
  • Blazor Server: de app wordt gepubliceerd in de map /bin/Release/{TARGET FRAMEWORK}/publish, waarbij de tijdelijke aanduiding {TARGET FRAMEWORK} het doelframework is. Implementeer de inhoud van de map publish op de host.
  • Blazor WebAssembly
    • Zelfstandig: de app wordt gepubliceerd in de /bin/Release/{TARGET FRAMEWORK}/publish of bin/Release/{TARGET FRAMEWORK}/browser-wasm/publish map. Als u de app wilt implementeren als een statische site, kopieert u de inhoud van de map wwwroot naar de statische sitehost.
    • Gehost: De server ASP.NET Core-app en client-app Blazor WebAssembly worden gepubliceerd in de /bin/Release/{TARGET FRAMEWORK}/publish map van de server-app, samen met eventuele statische webassets van de client-app. Implementeer de inhoud van de map publish op de host.

IIS

Als u een Blazor-app in IIS wilt hosten, raadpleegt u de volgende bronnen:

Het delen van een app-pool tussen ASP.NET Core-apps wordt niet ondersteund, waaronder voor Blazor-apps. Gebruik één app-pool per app bij het hosten met IIS en vermijd het gebruik van de virtuele mappen van IIS voor het hosten van meerdere apps.

Een of meer Blazor WebAssembly apps die worden gehost door een ASP.NET Core-app, ook wel een gehoste Blazor WebAssembly-oplossinggenoemd, worden ondersteund voor één app-pool. We raden echter niet aan of ondersteunen het toewijzen van één app-pool aan meerdere gehoste Blazor WebAssembly oplossingen of in hostingscenario's voor sub-apps.

Zie voor meer informatie over Blazor.

Ondersteuning voor JavaScript-bundelaar

De Blazor runtime is afhankelijk van JavaScript-bestanden (JS) en de .NET-runtime die is gecompileerd in WebAssembly-code en beheerde assembly's die zijn verpakt als WebAssembly-bestanden. Wanneer een Blazor app is gebouwd, is de Blazor runtime afhankelijk van deze bestanden van verschillende buildlocaties. Vanwege deze beperking Blazoris de build-uitvoer niet compatibel met JS bundelaars, zoals Gulp, Webpack en Rollup.

Als u build-uitvoer wilt produceren die compatibel is met JS bundelaars tijdens het publiceren, stelt u de WasmBundlerFriendlyBootConfig eigenschap true MSBuild in op in het projectbestand van de app:

<WasmBundlerFriendlyBootConfig>true</WasmBundlerFriendlyBootConfig>

Belangrijk

Deze functie produceert alleen de bundelvriendelijke uitvoer bij het publiceren van de app.

De uitvoer kan niet rechtstreeks worden uitgevoerd in de browser, maar kan worden gebruikt door JS hulpprogramma's om bestanden te bundelen JS met de rest van de door de ontwikkelaar geleverde scripts.

Wanneer WasmBundlerFriendlyBootConfig is ingeschakeld, bevat de geproduceerde JSimport-instructies voor alle assets in de app, waardoor de afhankelijkheden voor de bundelaar zichtbaar zijn. Veel van de assets kunnen niet door de browser worden geladen, maar bundelaars kunnen meestal worden geconfigureerd om de assets te herkennen op basis van hun bestandstype om het laden te verwerken. Raadpleeg de documentatie van de bundelaar voor meer informatie over het configureren van uw bundelaar.

Notitie

Bundeling van build-uitvoer moet mogelijk zijn door imports naar afzonderlijke bestandslocaties in kaart te brengen met behulp van een aangepaste plugin voor de bundler. We bieden momenteel geen dergelijke plugin.

Notitie

Bij het vervangen van de files invoegtoepassing door url, worden alle JS-bestanden van de app, inclusief de Blazor-WebAssembly-runtime (base64 gecodeerd in de JS), gebundeld in de uitvoer. De grootte van het bestand is aanzienlijk groter (bijvoorbeeld 300% groter) dan wanneer de bestanden worden gecureerd met de files invoegtoepassing, dus we raden u niet aan om de url invoegtoepassing als een algemene praktijk te gebruiken bij het produceren van bundelwerkvriendelijke uitvoer voor JS bundelverwerking.

De volgende voorbeeld-apps zijn gebaseerd op Rollup. Vergelijkbare concepten zijn van toepassing wanneer u andere JS bundelaars gebruikt.

Demonstratievoorbeeld-apps voor Blazor WebAssembly in een React-app (BlazorWebAssemblyReact) en .NET op WebAssembly in een React-app (DotNetWebAssemblyReact) voor .NET 10 of hoger zijn beschikbaar in de Blazor GitHub-voorbeeldopslagplaats (dotnet/blazor-samples).

Aspecten van Blazor WebAssembly caching zijn van toepassing op Blazor Web Apps

Blazor richtlijnen voor bundelcaching en HTTP-caching in het Blazor WebAssembly knooppunt richten zich op zelfstandige Blazor WebAssembly apps, maar diverse aspecten van client-side caching in deze artikelen zijn ook van toepassing op Blazor Web Apps die interactieve webassembly- of interactieve autorederingsmodi gebruiken. Blazor Web App Als een systeem dat inhoud renderend aan de clientzijde een cacheprobleem met een statisch bestand of bundel tegenkomt, raadpleeg dan de richtlijnen in deze artikelen om het probleem op te lossen.

configuratie van Blazor ServerMapFallbackToPage

Deze sectie is alleen van toepassing op Blazor Server apps. MapFallbackToPage wordt niet ondersteund in Blazor Web App- en Blazor WebAssembly-apps.

In scenario's waarin een app een afzonderlijk gebied met aangepaste resources en Razor onderdelen vereist:

  • Maak een map in de Pages map van de app om de resources op te slaan. Een beheerderssectie van een app wordt bijvoorbeeld gemaakt in een nieuwe map met de naam Admin (Pages/Admin).

  • Maak een hoofdpagina (_Host.cshtml) voor het gebied. Maak bijvoorbeeld een Pages/Admin/_Host.cshtml bestand op basis van de hoofdpagina van de app (Pages/_Host.cshtml). Geef geen @page-instructie op de Beheer-pagina _Host.

  • Voeg een indeling toe aan de map van het gebied (bijvoorbeeld Pages/Admin/_Layout.razor). Stel in de indeling voor het aparte gebied de <base>-tag op href zodat deze past bij de map van het gebied (bijvoorbeeld <base href="/Admin/" />). Voeg voor demonstratiedoeleinden ~/ toe aan de statische resources op de pagina. Bijvoorbeeld:

    • ~/css/bootstrap/bootstrap.min.css
    • ~/css/site.css
    • ~/BlazorSample.styles.css (de naamruimte van de voorbeeld-app is BlazorSample)
    • ~/_framework/blazor.server.js (Blazor script)
  • Als het gebied een eigen statische assetmap moet hebben, voegt u de map toe en geeft u de locatie op aan Static File Middleware in Program.cs (bijvoorbeeld app.UseStaticFiles("/Admin/wwwroot")).

  • Razor-onderdelen worden toegevoegd aan de map voor dit gebied. Voeg minimaal een Index onderdeel toe aan de gebiedsmap met de juiste @page instructie voor het gebied. Voeg bijvoorbeeld een Pages/Admin/Index.razor-bestand toe op basis van het standaardbestand Pages/Index.razor van de app. Geef het beheergebied aan als de routesjabloon boven aan het bestand (@page "/admin"). Voeg indien nodig extra onderdelen toe. Bijvoorbeeld Pages/Admin/Component1.razor met een @page richtlijn en routesjabloon van @page "/admin/component1.

  • Roep in Program.csMapFallbackToPage aan voor het aanvraagpad van het gebied direct voor het pad naar de terugvalhoofdpagina naar de _Host pagina:

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