Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Note
Dit is niet de nieuwste versie van dit artikel. Zie de .NET 9-versie van dit artikelvoor de huidige release.
Warning
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.
Important
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 WebAssembly apps host en implementeert.
Met het Blazor WebAssembly hostingmodel:
- De Blazor-app, de bijbehorende afhankelijkheden en de .NET-runtime worden parallel naar de browser gedownload.
- De app wordt rechtstreeks uitgevoerd in de browser-UI-thread.
Dit artikel heeft betrekking op het implementatiescenario waarin de Blazor-app wordt geplaatst op een statische hostingwebserver of -service. .NET wordt niet gebruikt voor de Blazor-app. Deze strategie wordt behandeld in de sectie Zelfstandige implementatie en andere artikelen in dit knooppunt voor IIS-, Azure-services, Apache, Nginx en GitHub Pages.
De volgende implementatiestrategieën worden ondersteund:
- De Blazor-app wordt geleverd door een ASP.NET Core-app. Deze strategie wordt behandeld in de sectie Gehoste implementatie met ASP.NET Core.
- De Blazor-app wordt geplaatst op een statische hostingwebserver of -service, waarbij .NET niet wordt gebruikt om de Blazor-app te bedienen. Deze strategie wordt behandeld in de sectie Zelfstandige implementatie, waaronder informatie over het hosten van een Blazor WebAssembly-app als een IIS-sub-app.
- Een ASP.NET Core-app fungeert als host voor meerdere Blazor WebAssembly-apps. Zie Meerdere gehoste ASP.NET Core Blazor WebAssembly-appsvoor meer informatie.
Hosting van subdomeinen en IIS-subtoepassingen
Voor het hosten van subdomeinen is geen speciale configuratie van de app vereist. U hoeft het basispad van de app (de <base> tag in wwwroot/index.html) niet te configureren om de app op een subdomein te hosten.
IiS-subtoepassing die als host fungeert voor vereist dat u het basispad van de app moet instellen. Zie Host en implementeer ASP.NET Core Blazorvoor meer informatie en kruiskoppelingen naar verdere richtlijnen voor het hosten van IIS-subtoepassingen.
Verklein de maximale heapgrootte voor sommige mobiele apparaatbrowsers
Bij het bouwen van een Blazor-app die wordt uitgevoerd op de client (.Client-project van een Blazor Web App- of zelfstandige Blazor WebAssembly-app) en specifiek is gericht op optimalisatie voor browsers op mobiele apparaten, met name Safari op iOS, kan het nodig zijn om het maximale geheugen voor de app aan te passen met de MSBuild-eigenschap EmccMaximumHeapSize. De standaardwaarde is 2.147.483.648 bytes, wat mogelijk te groot is en ertoe leidt dat de app vastloopt als de app probeert meer geheugen toe te wijzen met de browser deze niet kan verlenen. In het volgende voorbeeld wordt de waarde ingesteld op 268.435.456 bytes in het bestand Program:
Bij het bouwen van een Blazor WebAssembly-app die zich richt op browsers voor mobiele apparaten, met name Safari op iOS, kan het nodig zijn om het maximale geheugen voor de app te verlagen met de MSBuild-eigenschap EmccMaximumHeapSize. De standaardwaarde is 2.147.483.648 bytes, wat mogelijk te groot is en ertoe leidt dat de app vastloopt als de app probeert meer geheugen toe te wijzen met de browser deze niet kan verlenen. In het volgende voorbeeld wordt de waarde ingesteld op 268.435.456 bytes in het bestand Program:
<EmccMaximumHeapSize>268435456</EmccMaximumHeapSize>
Zie voor meer informatie over WasmApp.Common.targets/WebAssembly MSBuild-eigenschappen en -doelen.
Webcil-pakketformaat voor .NET-assemblies
Webcil is een webvriendelijke verpakkingsindeling voor .NET-assembly's die zijn ontworpen om het gebruik van Blazor WebAssembly in beperkende netwerkomgevingen mogelijk te maken. Webcil-bestanden maken gebruik van een standaard WebAssembly-wrapper, waarbij de assembly's worden geïmplementeerd als WebAssembly-bestanden die gebruikmaken van de standaardbestandsextensie .wasm.
Webcil is de standaardindeling voor pakketten wanneer u een Blazor WebAssembly-app publiceert. Als u het gebruik van Webcil wilt uitschakelen, stelt u de volgende MSBuild-eigenschap in het projectbestand van de app in:
<PropertyGroup>
<WasmEnableWebcil>false</WasmEnableWebcil>
</PropertyGroup>
Aanpassen hoe opstartbronnen worden geladen
Pas aan hoe opstartbronnen worden geladen met behulp van de loadBootResource-API. Zie ASP.NET Core Blazor startupvoor meer informatie.
Compression
Wanneer een Blazor WebAssembly-app wordt gepubliceerd, wordt de uitvoer statisch gecomprimeerd tijdens het publiceren om de grootte van de app te verminderen en de overhead voor runtimecompressie te verwijderen. De volgende compressiealgoritmen worden gebruikt:
Blazor vertrouwt erop dat de host de juiste gecomprimeerde bestanden levert. Bij het hosten van een zelfstandige Blazor WebAssembly-app is mogelijk extra werk vereist om ervoor te zorgen dat statisch gecomprimeerde bestanden worden geleverd:
Blazor vertrouwt erop dat de host de juiste gecomprimeerde bestanden levert. Wanneer u een ASP.NET Core HostedBlazor WebAssembly-project gebruikt, kan het hostproject inhoudsonderhandeling uitvoeren en de statisch gecomprimeerde bestanden leveren. Bij het hosten van een zelfstandige Blazor WebAssembly-app is mogelijk extra werk vereist om ervoor te zorgen dat statisch gecomprimeerde bestanden worden geleverd:
- Zie de sectie
web.configvoor configuratie van IIS-. - Bij het hosten van statische hostingoplossingen die geen ondersteuning bieden voor statische gecomprimeerde bestandsinhoudsonderhandeling, kunt u overwegen om de app te configureren voor het ophalen en decoderen van gecomprimeerde Brotli-bestanden:
Haal de JavaScript Brotli-decoder op uit de google/brotli GitHub-opslagplaats. Het minified decoder-bestand heet decode.min.js en bevindt zich in de map js van de opslagplaats.
Note
Als de geminimaliseerde versie van het decode.js-script (decode.min.js) mislukt, probeer dan de ongeminimaliseerde versie (decode.js) in plaats daarvan.
Werk de app bij om de decoder te gebruiken.
Stel in het bestand wwwroot/index.htmlautostart in op false in de Blazor-tag van <script>:
<script src="_framework/blazor.webassembly.js" autostart="false"></script>
Voeg na Blazor's <script> tag en vóór de afsluitende </body> tag het volgende JavaScript-codeblok <script> toe. Met de volgende functie wordt fetch aangeroepen met cache: 'no-cache' om de cache van de browser bijgewerkt te houden.
Blazor Web App:
<script type="module">
import { BrotliDecode } from './decode.min.js';
Blazor.start({
webAssembly: {
loadBootResource: function (type, name, defaultUri, integrity) {
if (type !== 'dotnetjs' && location.hostname !== 'localhost' && type !== 'configuration' && type !== 'manifest') {
return (async function () {
const response = await fetch(defaultUri + '.br', { cache: 'no-cache' });
if (!response.ok) {
throw new Error(response.statusText);
}
const originalResponseBuffer = await response.arrayBuffer();
const originalResponseArray = new Int8Array(originalResponseBuffer);
const decompressedResponseArray = BrotliDecode(originalResponseArray);
const contentType = type ===
'dotnetwasm' ? 'application/wasm' : 'application/octet-stream';
return new Response(decompressedResponseArray,
{ headers: { 'content-type': contentType } });
})();
}
}
}
});
</script>
Zelfstandige Blazor WebAssembly:
<script type="module">
import { BrotliDecode } from './decode.min.js';
Blazor.start({
loadBootResource: function (type, name, defaultUri, integrity) {
if (type !== 'dotnetjs' && location.hostname !== 'localhost' && type !== 'configuration') {
return (async function () {
const response = await fetch(defaultUri + '.br', { cache: 'no-cache' });
if (!response.ok) {
throw new Error(response.statusText);
}
const originalResponseBuffer = await response.arrayBuffer();
const originalResponseArray = new Int8Array(originalResponseBuffer);
const decompressedResponseArray = BrotliDecode(originalResponseArray);
const contentType = type ===
'dotnetwasm' ? 'application/wasm' : 'application/octet-stream';
return new Response(decompressedResponseArray,
{ headers: { 'content-type': contentType } });
})();
}
}
});
</script>
Zie ASP.NET Core Blazor opstartenvoor meer informatie over het laden van opstartresources.
Als u compressie wilt uitschakelen, voegt u de eigenschap CompressionEnabled MSBuild toe aan het projectbestand van de app en stelt u de waarde in op false:
<PropertyGroup>
<CompressionEnabled>false</CompressionEnabled>
</PropertyGroup>
De eigenschap CompressionEnabled kan worden doorgegeven aan de opdracht dotnet publish met de volgende syntaxis in een opdrachtshell:
dotnet publish -p:CompressionEnabled=false
Als u compressie wilt uitschakelen, voegt u de eigenschap BlazorEnableCompression MSBuild toe aan het projectbestand van de app en stelt u de waarde in op false:
<PropertyGroup>
<BlazorEnableCompression>false</BlazorEnableCompression>
</PropertyGroup>
De eigenschap BlazorEnableCompression kan worden doorgegeven aan de opdracht dotnet publish met de volgende syntaxis in een opdrachtshell:
dotnet publish -p:BlazorEnableCompression=false
URL's herschrijven voor de juiste routering
Routeringsaanvragen voor paginaonderdelen in een Blazor WebAssembly-app is niet zo eenvoudig als routeringsaanvragen in een Blazor Server-app. Overweeg een Blazor WebAssembly-app met twee onderdelen:
-
Main.razor: wordt in de rootdirectory van de app geladen en bevat een koppeling naar deAbout-component (href="About"). -
About.razor:Aboutonderdeel.
Wanneer het standaarddocument van de app wordt aangevraagd met behulp van de adresbalk van de browser (bijvoorbeeld https://www.contoso.com/):
- De browser doet een aanvraag.
- De standaardpagina wordt geretourneerd. Dit is meestal
index.html. -
index.htmlinitialiseert de app. -
Router onderdeel wordt geladen en het Razor
Mainonderdeel wordt weergegeven.
Op de hoofdpagina werkt het selecteren van de koppeling naar het About-component op de client omdat de Blazor router de browser ervan weerhoudt een verzoek te doen op internet naar www.contoso.com voor About en het weergegeven About-component zelf aflevert. Alle aanvragen voor interne eindpunten binnen de Blazor WebAssembly-app werken op dezelfde manier: aanvragen activeren geen browsergebaseerde aanvragen naar server-gehoste bronnen op het internet. De router verwerkt de aanvragen intern.
Als een aanvraag wordt gedaan met behulp van de adresbalk van de browser voor www.contoso.com/About, mislukt de aanvraag. Er bestaat geen dergelijke resource op de internethost van de app. Er wordt dus een 404 - Niet gevonden antwoord geretourneerd.
Omdat browsers aanvragen indienen bij internetgebaseerde hosts voor pagina's aan de clientzijde, moeten webservers en hostingaanbieders alle aanvragen voor middelen die niet fysiek op de server staan naar de index.html-pagina herschrijven. Wanneer index.html wordt geretourneerd, neemt de router van de app Blazor het over en verzendt de juiste resource.
Wanneer u implementeert op een IIS-server, kunt u de URL-module herschrijven met het gepubliceerde web.config-bestand van de app. Zie Host en implementeer ASP.NET Core Blazor WebAssembly met IIS voor meer informatie.
Gehoste implementatie met ASP.NET Core
Een gehoste implementatie levert de Blazor WebAssembly-app vanaf een ASP.NET Core-app die op een webserver draait aan browsers.
De client-Blazor WebAssembly-app wordt gepubliceerd in de /bin/Release/{TARGET FRAMEWORK}/publish/wwwroot map van de server-app, samen met andere statische webassets van de server-app. De twee apps worden samen geïmplementeerd. Een webserver die een ASP.NET Core-app kan hosten, is vereist. Voor een gehoste implementatie bevat Visual Studio de Blazor WebAssembly App-projectsjabloon (blazorwasm sjabloon bij gebruik van de opdracht dotnet new) met de optie Hosted geselecteerd (-ho|--hosted wanneer u de opdracht dotnet new gebruikt).
Zie de volgende artikelen voor meer informatie:
- ASP.NET Core-app hosten en implementeren: Host en implementeren ASP.NET Core
- Implementatie in Azure App Service: een ASP.NET Core-app publiceren naar Azure met Visual Studio
- Blazor projectsjablonen: ASP.NET Core Blazor projectstructuur
Gehoste implementatie van een frameworkafhankelijk uitvoerbaar bestand voor een specifiek platform
Als u een gehoste Blazor WebAssembly-app wilt implementeren als een frameworkafhankelijk uitvoerbaar bestand voor een specifiek platform (niet zelfstandig) gebruikt u de volgende richtlijnen op basis van de hulpprogramma's die worden gebruikt.
Visual Studio
Een zelfstandige-implementatie is geconfigureerd voor een gegenereerd publicatieprofiel (.pubxml). Controleer of het publicatieprofiel van het Server project de eigenschap <SelfContained> MSBuild bevat die is ingesteld op false.
In het .pubxml publiceerprofielbestand in de Server-map van het Properties-project:
<SelfContained>false</SelfContained>
Stel de Runtime Identifier (RID) in met behulp van de Target Runtime instelling in de Instellingen sectie van de Publiceren gebruikersinterface, waarmee de <RuntimeIdentifier> MSBuild-eigenschap in het publicatieprofiel wordt gegenereerd:
<RuntimeIdentifier>{RID}</RuntimeIdentifier>
In de voorgaande configuratie is de tijdelijke aanduiding {RID} de Runtime Identifier (RID).
Publiceer het Server project in de Release-configuratie.
Note
Het is mogelijk om een app te publiceren met publicatieprofielinstellingen, met behulp van de .NET CLI, door /p:PublishProfile={PROFILE} mee te geven aan de opdracht dotnet publish, waarbij de tijdelijke aanduiding {PROFILE} het profiel is. Zie voor meer informatie de secties Profielen publiceren en Map publicatievoorbeeld in het artikel Visual Studio-publicatieprofielen (.pubxml) voor ASP.NET Core-app-implementatie. Als u de RID doorgeeft in de opdracht dotnet publish en niet in het publicatieprofiel, gebruikt u de eigenschap MSBuild (/p:RuntimeIdentifier) met de opdracht, niet met de optie -r|--runtime.
.NET CLI
Configureer een zelfstandige-implementatie door de <SelfContained> MSBuild-eigenschap in <PropertyGroup> in het projectbestand van het Server-project te plaatsen en in te stellen op false.
<SelfContained>false</SelfContained>
Important
De eigenschap SelfContained moet in het projectbestand van het Server project worden geplaatst. De eigenschap kan niet correct worden ingesteld met de opdracht dotnet publish met behulp van de optie --no-self-contained of de eigenschap MSBuild /p:SelfContained=false.
Stel de RID- (
Optie 1: stel de RID in een
<PropertyGroup>in het projectbestand van het Server project in:<RuntimeIdentifier>{RID}</RuntimeIdentifier>In de voorgaande configuratie is de tijdelijke aanduiding
{RID}de Runtime Identifier (RID).Publiceer de app in de releaseconfiguratie vanuit het Server project:
dotnet publish -c ReleaseOptie 2: geef de RID door in de opdracht
dotnet publishals de eigenschap MSBuild (/p:RuntimeIdentifier), niet met de optie-r|--runtime:dotnet publish -c Release /p:RuntimeIdentifier={RID}In het voorgaande commando is de tijdelijke aanduiding
{RID}de Runtime Identifier (RID).
Zie de volgende artikelen voor meer informatie:
Standalone deployment
Een zelfstandige implementatie dient de Blazor WebAssembly-app als een set statische bestanden die rechtstreeks door clients worden aangevraagd. Elke statische bestandsserver kan de Blazor-app bedienen.
Zelfstandige implementatie-assets worden gepubliceerd in de /bin/Release/{TARGET FRAMEWORK}/publish/wwwroot-map of de bin/Release/{TARGET FRAMEWORK}/browser-wasm/publish-map, waarbij de {TARGET FRAMEWORK} tijdelijke aanduiding het doelframework is.
Azure App Service
Blazor WebAssembly apps kunnen worden geïmplementeerd in Azure App Services in Windows, die als host fungeert voor de app op IIS.
Het implementeren van een zelfstandige Blazor WebAssembly-app in Azure App Service voor Linux wordt momenteel niet ondersteund. Het is raadzaam om een zelfstandige Blazor WebAssembly-app te hosten met behulp van Azure Static Web Apps, dat dit scenario ondersteunt.
Zelfstandig met Docker
Een zelfstandige Blazor WebAssembly-app wordt gepubliceerd als een set statische bestanden die worden gehost door een statische bestandsserver.
De app hosten in Docker:
- Kies een Docker-container met webserverondersteuning, zoals Nginx of Apache.
- Kopieer de
publishmap assets naar een map op de locatie die is gedefinieerd op de webserver om statische bestanden te hosten. - Pas indien nodig aanvullende configuratie toe om de Blazor WebAssembly-app te bedienen.
Zie de volgende bronnen voor configuratierichtlijnen:
Hostconfiguratiewaarden
De Blazor WebAssembly apps kunnen de volgende hostconfiguratiewaarden als opdrachtregelargumenten accepteren tijdens de uitvoeringstijd in de ontwikkelomgeving.
Content root
Met het argument --contentroot wordt het absolute pad ingesteld naar de map die de inhoudsbestanden van de app bevat (hoofdmap van de inhoud). In de volgende voorbeelden is /content-root-path het hoofdpad voor de inhoud van de app.
Geef het argument door wanneer u de app lokaal uitvoert bij een opdrachtprompt. Voer in de map van de app het volgende uit:
dotnet watch --contentroot=/content-root-pathVoeg een vermelding toe aan het
launchSettings.json-bestand van de app in het profiel IIS Express. Deze instelling wordt gebruikt wanneer de app wordt uitgevoerd met het Visual Studio Debugger en vanaf een opdrachtprompt metdotnet watch(ofdotnet run)."commandLineArgs": "--contentroot=/content-root-path"Geef in Visual Studio het argument op in Eigenschappen>Foutopsporing>Toepassingsargumenten. Als u het argument instelt op de eigenschappenpagina van Visual Studio, wordt het argument toegevoegd aan het bestand
launchSettings.json.--contentroot=/content-root-path
Path base
Met het argument --pathbase wordt het basispad van de app ingesteld voor een app die lokaal wordt uitgevoerd met een niet-hoofd-relatief URL-pad (de <base> tag href is ingesteld op een ander pad dan / voor fasering en productie). In de volgende voorbeelden is /relative-URL-path het basispad van de app. Voor meer informatie, zie het basispad van de ASP.NET Core-appBlazor.
Important
In tegenstelling tot het pad dat is opgegeven voor href van de <base>-tag, moet u geen afsluitende slash (/) opnemen bij het doorgeven van de waarde van het --pathbase argument. Als het basispad van de app wordt opgegeven in de tag <base> als <base href="/CoolApp/"> (inclusief een afsluitende slash), geeft u de waarde van het opdrachtregelargument door als --pathbase=/CoolApp (geen afsluitende slash).
Geef het argument door wanneer u de app lokaal uitvoert bij een opdrachtprompt. Voer in de map van de app het volgende uit:
dotnet watch --pathbase=/relative-URL-pathVoeg een vermelding toe aan het
launchSettings.json-bestand van de app in het profiel IIS Express. Deze instelling wordt gebruikt bij het uitvoeren van de app met het Visual Studio Debugger en vanaf een opdrachtprompt metdotnet watch(ofdotnet run)."commandLineArgs": "--pathbase=/relative-URL-path"Geef in Visual Studio het argument op in Eigenschappen>Foutopsporing>Toepassingsargumenten. Als u het argument instelt op de eigenschappenpagina van Visual Studio, wordt het argument toegevoegd aan het bestand
launchSettings.json.--pathbase=/relative-URL-path
Voor meer informatie, zie het basispad van de ASP.NET Core-appBlazor.
URLs
Het argument --urls stelt de IP-adressen of hostadressen in met poorten en protocollen om te luisteren naar aanvragen.
Geef het argument door wanneer u de app lokaal uitvoert bij een opdrachtprompt. Voer in de map van de app het volgende uit:
dotnet watch --urls=http://127.0.0.1:0Voeg een vermelding toe aan het
launchSettings.json-bestand van de app in het profiel IIS Express. Deze instelling wordt gebruikt bij het uitvoeren van de app met het Visual Studio Debugger en vanaf een opdrachtprompt metdotnet watch(ofdotnet run)."commandLineArgs": "--urls=http://127.0.0.1:0"Geef in Visual Studio het argument op in Eigenschappen>Foutopsporing>Toepassingsargumenten. Als u het argument instelt op de eigenschappenpagina van Visual Studio, wordt het argument toegevoegd aan het bestand
launchSettings.json.--urls=http://127.0.0.1:0
De trimmer configureren
Bij elke release-build voert Blazor Intermediate Language (IL) trimming uit om onnodige IL uit de uitvoerassemblies te verwijderen. Zie De trimmer configureren voor ASP.NET Core Blazorvoor meer informatie.
Linker configureren
Blazor voert koppeling van Intermediate Language (IL) uit bij elke Release-build om onnodige IL uit de uitvoerassemblages te verwijderen. Zie De Linker configureren voor ASP.NET Core Blazorvoor meer informatie.
De bestandsnaamextensie van DLL-bestanden wijzigen
Deze sectie is van toepassing op .NET 5 tot en met .NET 7. In .NET 8 of hoger worden .NET-assembly's geïmplementeerd als WebAssembly-bestanden (.wasm) met behulp van de webcilbestandsindeling.
Als een firewall, antivirusprogramma of netwerkbeveiligingsapparaat de overdracht van de DLL-bestanden (Dynamic Link Library) van de app (.dll) blokkeert, kunt u de richtlijnen in deze sectie volgen om de bestandsnaamextensies van de gepubliceerde DLL-bestanden van de app te wijzigen.
Als u de bestandsnaamextensies van de DLL-bestanden van de app wijzigt, wordt het probleem mogelijk niet opgelost omdat veel beveiligingssystemen de inhoud van de bestanden van de app scannen, niet alleen bestandsextensies controleren.
Voor een krachtigere benadering in omgevingen die het downloaden en uitvoeren van DLL-bestanden blokkeren, kunt u kiezen uit een van de volgende benaderingen:
- Gebruik .NET 8 of hoger, waarmee .NET-assembly's worden verpakt als WebAssembly-bestanden (
.wasm) met behulp van de webcilbestandsindeling . Voor meer informatie, zie de sectie Webcil-pakketten voor .NET-assembly's in een .NET 8- of latere versie van dit artikel. - Gebruik in .NET 6 of hoger een aangepaste implementatie-indeling.
Er bestaan benaderingen van derden voor het oplossen van dit probleem. Zie de resources op Awesome Blazorvoor meer informatie.
Nadat u de app hebt gepubliceerd, gebruikt u een shellscript of DevOps-buildpijplijn om de naam van .dll bestanden te wijzigen om een andere bestandsextensie te gebruiken in de map van de gepubliceerde uitvoer van de app.
In de volgende voorbeelden:
- PowerShell (PS) wordt gebruikt om de bestandsextensies bij te werken.
-
.dll-bestanden worden hernoemd door de.bin-bestandsextensie te gebruiken vanaf de opdrachtregel. - Bestanden die worden vermeld in het gepubliceerde Blazor opstartmanifest met een
.dllbestandsextensie, worden bijgewerkt naar de.binbestandsextensie. - Als service worker-assets ook worden gebruikt, werkt een PowerShell-opdracht de
.dllbestanden bij die worden vermeld in hetservice-worker-assets.js-bestand naar de bestandsextensie.bin.
Als u een andere bestandsextensie dan .binwilt gebruiken, vervangt u .bin in de volgende opdrachten door de gewenste bestandsextensie.
In de volgende opdrachten is de {PATH} tijdelijke aanduiding het pad naar de gepubliceerde _framework map in de publish map.
Wijzig de naam van bestandsextensies in de map:
dir {PATH} | rename-item -NewName { $_.name -replace ".dll\b",".bin" }
Wijzig de naam van bestandsextensies in het blazor.boot.json bestand:
((Get-Content {PATH}\blazor.boot.json -Raw) -replace '.dll"','.bin"') | Set-Content {PATH}\blazor.boot.json
Als er ook gebruik wordt gemaakt van serviceworker-assets doordat de app een Progressive Web App (PWA) is:
((Get-Content {PATH}\service-worker-assets.js -Raw) -replace '.dll"','.bin"') | Set-Content {PATH}\service-worker-assets.js
In de voorgaande opdracht is {PATH} de tijdelijke aanduiding voor het pad naar het gepubliceerde service-worker-assets.js-bestand.
Ga op een van de volgende manieren te werk om het gecomprimeerde blazor.boot.json bestand aan te pakken:
- Hercomprimeer het bijgewerkte
blazor.boot.jsonbestand, waardoor nieuweblazor.boot.json.gzenblazor.boot.json.brbestanden worden geproduceerd. (Recommended) - Verwijder de gecomprimeerde
blazor.boot.json.gz- enblazor.boot.json.br-bestanden. (Compressie is uitgeschakeld met deze methode.)
Voor het gecomprimeerde bestand van service-worker-assets.js moet u een van de volgende methoden gebruiken:
- Hercomprimeer het bijgewerkte
service-worker-assets.jsbestand, waardoor nieuweservice-worker-assets.js.brenservice-worker-assets.js.gzbestanden worden geproduceerd. (Recommended) - Verwijder de gecomprimeerde
service-worker-assets.js.gz- enservice-worker-assets.js.br-bestanden. (Compressie is uitgeschakeld met deze methode.)
Als u de extensiewijziging in Windows in .NET 6/7 wilt automatiseren, gebruikt de volgende methode een PowerShell-script dat in de hoofdmap van het project wordt geplaatst. Het volgende script, waarmee compressie wordt uitgeschakeld, is de basis voor verdere wijzigingen als u het blazor.boot.json bestand en service-worker-assets.js bestand opnieuw wilt comprimeren als de app een Progressive Web App (PWA) is. Het pad naar de publish map wordt doorgegeven aan het script wanneer het wordt uitgevoerd.
ChangeDLLExtensions.ps1::
param([string]$filepath)
dir $filepath\wwwroot\_framework | rename-item -NewName { $_.name -replace ".dll\b",".bin" }
((Get-Content $filepath\wwwroot\_framework\blazor.boot.json -Raw) -replace '.dll"','.bin"') | Set-Content $filepath\wwwroot\_framework\blazor.boot.json
Remove-Item $filepath\wwwroot\_framework\blazor.boot.json.gz
Remove-Item $filepath\wwwroot\_framework\blazor.boot.json.br
Als service worker-assets ook worden gebruikt omdat de app een Progressive Web App (PWA) is, voegt u de volgende opdrachten toe:
((Get-Content $filepath\wwwroot\service-worker-assets.js -Raw) -replace '.dll"','.bin"') | Set-Content $filepath\wwwroot\service-worker-assets.js
Remove-Item $filepath\wwwroot\service-worker-assets.js.gz
Remove-Item $filepath\wwwroot\service-worker-assets.js.br
In het projectbestand wordt het script uitgevoerd na het publiceren van de app voor de Release-configuratie:
<Target Name="ChangeDLLFileExtensions" AfterTargets="AfterPublish" Condition="'$(Configuration)'=='Release'">
<Exec Command="powershell.exe -command "& {.\ChangeDLLExtensions.ps1 '$(SolutionDir)'}"" />
</Target>
Na het publiceren van de app, handmatig opnieuw comprimeren blazor.boot.jsonen service-worker-assets.js indien gebruikt, om compressie opnieuw in te schakelen.
Note
Als u dezelfde assemblies hernoemt en lui laadt, kunt u de richtlijnen raadplegen in Lui laden van assemblies in ASP.NET Core Blazor WebAssembly.
Normaal gesproken vereist de server van de app statische assetconfiguratie om de bestanden te verwerken met de bijgewerkte extensie. Voor een app die wordt gehost door IIS, voegt u een MIME-kaartvermelding (<mimeMap>) toe voor de nieuwe bestandsextensie in de sectie statische inhoud (<staticContent>) in een aangepast web.config-bestand. In het volgende voorbeeld wordt ervan uitgegaan dat de bestandsextensie wordt gewijzigd van .dll in .bin:
<staticContent>
...
<mimeMap fileExtension=".bin" mimeType="application/octet-stream" />
...
</staticContent>
Neem een update op voor gecomprimeerde bestanden als compressie wordt gebruikt:
<mimeMap fileExtension=".bin.br" mimeType="application/octet-stream" />
<mimeMap fileExtension=".bin.gz" mimeType="application/octet-stream" />
Verwijder de vermelding voor de bestandsextensie .dll:
- <mimeMap fileExtension=".dll" mimeType="application/octet-stream" />
Verwijder vermeldingen voor gecomprimeerde .dll bestanden als compressie wordt gebruikt:
- <mimeMap fileExtension=".dll.br" mimeType="application/octet-stream" />
- <mimeMap fileExtension=".dll.gz" mimeType="application/octet-stream" />
Zie de sectie web.config voor meer informatie over aangepaste web.config bestanden.
Beschadiging bij eerdere implementatie
Doorgaans bij de implementatie:
- Alleen de bestanden die zijn gewijzigd, worden vervangen, wat meestal resulteert in een snellere implementatie.
- Bestaande bestanden die geen deel uitmaken van de nieuwe implementatie, blijven aanwezig voor gebruik door de nieuwe implementatie.
In zeldzame gevallen kunnen blijvende bestanden van een vorige implementatie een nieuwe implementatie verstoren. Het volledig verwijderen van de bestaande implementatie (of lokaal gepubliceerde app voorafgaand aan de implementatie) kan het probleem met een beschadigde implementatie oplossen. Vaak is het verwijderen van de bestaande implementatie zodra voldoende is om het probleem op te lossen, waaronder voor een DevOps-build- en implementatiepijplijn.
Als u vaststelt dat het wissen van een eerdere implementatie altijd vereist is wanneer een DevOps-build- en implementatiepijplijn wordt gebruikt, kunt u tijdelijk een stap toevoegen aan de build-pijplijn om de vorige implementatie voor elke nieuwe implementatie te verwijderen totdat u de exacte oorzaak van de beschadiging oplost.