Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Note
Questa non è la versione più recente di questo articolo. Per la versione corrente, vedere la versione .NET 10 di questo articolo.
Warning
Questa versione di ASP.NET Core non è più supportata. Per altre informazioni, vedere i criteri di supporto di .NET e .NET Core. Per la versione corrente, vedere la versione .NET 9 di questo articolo.
Questo articolo illustra come ospitare e distribuire le app Blazor WebAssembly.
Con il Blazor WebAssembly modello di hosting:
- L'app Blazor , le relative dipendenze e il runtime .NET vengono scaricati nel browser in parallelo.
- L'app viene eseguita direttamente nel thread dell'interfaccia utente del browser.
Questo articolo si riferisce allo scenario di distribuzione in cui l'app Blazor viene inserita in un server o un servizio Web di hosting statico, .NET non viene usato per gestire l'app Blazor . Questa strategia è illustrata nella sezione Distribuzione autonoma e in altri articoli di questo nodo per IIS, servizi di Azure, Apache, Nginx e GitHub Pages.
Sono supportate le strategie di distribuzione seguenti:
- L'app Blazor viene gestita da un'app ASP.NET Core. Questa strategia viene trattata nella sezione Distribuzione ospitata con ASP.NET Core.
- L'app Blazor viene inserita in un server o un servizio Web di hosting statico, in cui .NET non viene usato per gestire l'app Blazor . Questa strategia è descritta nella sezione Distribuzione autonoma, che include informazioni sull'hosting di un'app Blazor WebAssembly come applicazione secondaria di IIS.
- Un'app ASP.NET Core ospita più Blazor WebAssembly app. Per ulteriori informazioni, consultare
Più app ASP.NET Core ospitate .
Sottodominio e hosting di sotto-applicazioni IIS
L'hosting del sottodominio non richiede una configurazione speciale dell'app.
Non è necessario configurare il percorso di base dell'app (il <base> tag in wwwroot/index.html) per ospitare l'app in un sottodominio.
L'hosting di sotto-applicazioni IIS richiede di impostare il percorso di base dell'app. Per altre informazioni e collegamenti incrociati per altre indicazioni sull'hosting di applicazioni secondarie IIS, vedere Ospitare e distribuire ASP.NET Core Blazor.
Ridurre le dimensioni massime dell'heap per alcuni browser di dispositivi mobili
Quando si sviluppa un'app Blazor che viene eseguita sul client (progetto .Client di un'app Blazor Web App o app autonoma Blazor WebAssembly) e destinata ai browser dei dispositivi mobili, in particolare Safari su iOS, potrebbe essere necessario ridurre la memoria massima per l'app utilizzando la proprietà EmccMaximumHeapSize di MSBuild. Il valore predefinito è 2.147.483.648 byte, che potrebbe essere troppo grande e causare un arresto anomalo dell'app se l'app tenta di allocare più memoria con il browser che non riesce a concederlo. Nell'esempio seguente il valore viene impostato su 268.435.456 byte nel Program file:
Quando si compila un'app Blazor WebAssembly destinata ai browser per dispositivi mobili, in particolare Safari in iOS, è possibile che sia necessaria una riduzione della memoria massima per l'app con la proprietà EmccMaximumHeapSize MSBuild. Il valore predefinito è 2.147.483.648 byte, che potrebbe essere troppo grande e causare un arresto anomalo dell'app se l'app tenta di allocare più memoria con il browser che non riesce a concederlo. Nell'esempio seguente il valore viene impostato su 268.435.456 byte nel Program file:
<EmccMaximumHeapSize>268435456</EmccMaximumHeapSize>
Per ulteriori informazioni sulle proprietà e destinazioni di MSBuild Mono/WebAssembly, vedere
Formato di creazione di pacchetti Webcil per assembly .NET
Webcil è un formato di creazione di pacchetti web per gli assembly .NET progettati per consentire l'uso Blazor WebAssembly in ambienti di rete restrittivi. I file Webcil usano un wrapper WebAssembly standard, in cui gli assembly vengono distribuiti come file WebAssembly che usano l'estensione di file standard .wasm .
Webcil è il formato di creazione di pacchetti predefinito quando si pubblica un'app Blazor WebAssembly . Per disabilitare l'uso di Webcil, impostare la proprietà MSBuild seguente nel file di progetto dell'app:
<PropertyGroup>
<WasmEnableWebcil>false</WasmEnableWebcil>
</PropertyGroup>
Personalizzare la modalità di caricamento delle risorse di avvio
Personalizzare la modalità di caricamento delle risorse di avvio tramite l'API loadBootResource . Per ulteriori informazioni, vedere ASP.NET Core Blazor startup.
Compression
Quando un'app Blazor WebAssembly viene pubblicata, l'output viene compresso in modo statico durante la pubblicazione per ridurre le dimensioni dell'app e rimuovere il sovraccarico per la compressione in fase di esecuzione. Vengono usati gli algoritmi di compressione seguenti:
Blazor si basa sull'host per gestire i file compressi appropriati. Quando si ospita un'app Blazor WebAssembly autonoma, potrebbe essere necessario un lavoro aggiuntivo per garantire che i file compressi in modo statico vengano gestiti:
Blazor si basa sull'host per gestire i file compressi appropriati. Quando si usa un progetto ospitatoBlazor WebAssembly ASP.NET Core, il progetto host è in grado di eseguire la negoziazione del contenuto e di gestire i file compressi in modo statico. Quando si ospita un'app Blazor WebAssembly autonoma, potrebbe essere necessario un lavoro aggiuntivo per garantire che i file compressi in modo statico vengano gestiti:
- Per la configurazione della compressione IIS
web.config, vedere la sezione IIS: Brotli e Gzip compression (Compressione IIS: Brotli e Gzip). - Quando si ospita in soluzioni di hosting statiche che non supportano la negoziazione del contenuto di file compressi in modo statico, è consigliabile configurare l'app per recuperare e decodificare i file compressi Brotli:
Ottenere il decodificatore JavaScript Brotli dal google/brotli repository GitHub. Il file minimizzato del decodificatore è denominato
Note
Se la versione minimizzata dello decode.js script (decode.min.js) ha esito negativo, provare a usare invece la versione non modificata (decode.js).
Aggiornare l'app per usare il decodificatore.
Nel file wwwroot/index.html, settare autostart su false nel tag di Blazor<script>:
<script src="_framework/blazor.webassembly.js" autostart="false"></script>
Dopo il tag Blazor e prima del tag di chiusura <script>, aggiungere il seguente blocco di codice JavaScript </body>. La funzione seguente chiama fetch con cache: 'no-cache' per mantenere aggiornata la cache del browser.
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>
Un Blazor WebAssembly autonomo:
<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>
Per ulteriori informazioni sul caricamento delle risorse di avvio, vedere ASP.NET Core Blazor startup.
Per disabilitare la compressione, aggiungere la CompressionEnabled proprietà MSBuild al file di progetto dell'app e impostare il valore su false:
<PropertyGroup>
<CompressionEnabled>false</CompressionEnabled>
</PropertyGroup>
La CompressionEnabled proprietà può essere passata al dotnet publish comando con la sintassi seguente in una shell dei comandi:
dotnet publish -p:CompressionEnabled=false
Per disabilitare la compressione, aggiungere la BlazorEnableCompression proprietà MSBuild al file di progetto dell'app e impostare il valore su false:
<PropertyGroup>
<BlazorEnableCompression>false</BlazorEnableCompression>
</PropertyGroup>
La BlazorEnableCompression proprietà può essere passata al dotnet publish comando con la sintassi seguente in una shell dei comandi:
dotnet publish -p:BlazorEnableCompression=false
Riscrivere gli URL per il routing corretto
Il routing delle richieste per i componenti di pagina in un'app Blazor WebAssembly non è semplice quanto il routing delle richieste in un'app Blazor Server . Si consideri un'app Blazor WebAssembly con due componenti:
-
Main.razor: si carica alla radice dell'applicazione e contiene un collegamento al componenteAbout(href="About"). -
About.razor: componenteAbout.
Quando viene richiesto il documento predefinito dell'app usando la barra degli indirizzi del browser (ad esempio, https://www.contoso.com/):
- Il browser invia una richiesta.
- Viene restituita la pagina predefinita, che in genere è
index.html. -
index.htmlavvia l'app. -
Router il componente viene caricato e viene eseguito il rendering del componente Razor
Main.
Nella pagina principale, la selezione del collegamento al componente About funziona sul client perché il router Blazor impedisce al browser di effettuare una richiesta su Internet per www.contoso.comAbout e gestisce direttamente il componente About renderizzato. Tutte le richieste di endpoint interni all'interno dell'app Blazor WebAssembly funzionano allo stesso modo: le richieste non attivano richieste basate su browser alle risorse ospitate nel server su Internet. Le richieste vengono gestite internamente dal router.
Se una richiesta viene effettuata usando la barra degli indirizzi del browser per www.contoso.com/About, la richiesta ha esito negativo. La risorsa non esiste nell'host Internet dell'app, quindi viene restituita la risposta 404 non trovato.
Poiché i browser effettuano richieste agli host basati su Internet per le pagine lato client, i server Web e i servizi di hosting devono riscrivere tutte le richieste di risorse non fisicamente nel server nella index.html pagina. Quando index.html viene restituito, il router dell'app Blazor prende in carico e risponde con la risorsa corretta.
Quando si esegue la distribuzione in un server IIS, è possibile usare il modulo di riscrittura URL con il file pubblicato web.config dell'app. Per altre informazioni, vedere Ospitare e distribuire ASP.NET Core Blazor WebAssembly con IIS.
Distribuzione ospitata con ASP.NET Core
Una distribuzione ospitata serve l'app Blazor WebAssembly ai browser da un'app ASP.NET Core che viene eseguita su un server web.
L'app client Blazor WebAssembly viene pubblicata nella /bin/Release/{TARGET FRAMEWORK}/publish/wwwroot cartella dell'app server, insieme a qualsiasi altro asset Web statico dell'app server. Le due app vengono distribuite insieme. È necessario un server Web in grado di ospitare un'app ASP.NET Core. Per una distribuzione ospitata, Visual Studio include il Blazor WebAssembly modello di progetto app (blazorwasm modello quando si usa il dotnet new comando ) con l'opzione Hosted selezionata (-ho|--hosted quando si usa il dotnet new comando ).
Per altre informazioni, vedere gli articoli seguenti:
- hosting e distribuzione di app ASP.NET Core: ospitare e distribuire ASP.NET Core
- Distribuzione nel servizio app Azure: pubblicare un'app ASP.NET Core in Azure con Visual Studio
- Blazormodelli di progetto: struttura del progetto ASP.NET Core Blazor
Distribuzione ospitata di un eseguibile dipendente dal framework per una piattaforma specifica
Per distribuire un'app ospitata Blazor WebAssembly come eseguibile dipendente dal framework per una piattaforma specifica (non indipendente) usare le indicazioni seguenti in base agli strumenti in uso.
Visual Studio
Una distribuzione autonoma è configurata per un profilo di pubblicazione generato (.pubxml). Verificare che il Server profilo di pubblicazione del progetto contenga la <SelfContained> proprietà MSBuild impostata su false.
Nel file del .pubxml profilo di pubblicazione nella Server cartella del Properties progetto:
<SelfContained>false</SelfContained>
Impostare l'identificatore di runtime (RID) utilizzando l'impostazione Runtime di Destinazione nell'area Impostazioni della UI di Pubblicazione, che genera la <RuntimeIdentifier> proprietà MSBuild nel profilo di pubblicazione:
<RuntimeIdentifier>{RID}</RuntimeIdentifier>
Nella configurazione precedente, il segnaposto {RID} è l'identificatore di runtime (RID).
Pubblicare il Server progetto nella configurazione Release.
Note
È possibile pubblicare un'app con le impostazioni del profilo di pubblicazione usando l'interfaccia della riga di comando di .NET passando /p:PublishProfile={PROFILE} al comando dotnet publish, dove il segnaposto {PROFILE} rappresenta il profilo. Per ulteriori informazioni, consultare le sezioni Profili di pubblicazione e Esempio di pubblicazione di cartelle nell'articolo Profili di pubblicazione di Visual Studio (.pubxml) per la distribuzione di app ASP.NET Core. Se si passa il RID nel comando dotnet publish e non nel profilo di pubblicazione, utilizzare la proprietà MSBuild (/p:RuntimeIdentifier) con il comando, non con l'opzione -r|--runtime.
CLI di .NET
Configurare una distribuzione autonoma posizionando la <SelfContained> proprietà MSBuild in un <PropertyGroup> nel Server file di progetto impostato su false:
<SelfContained>false</SelfContained>
Important
La SelfContained proprietà deve essere inserita nel Server file di progetto del progetto. La proprietà non può essere impostata correttamente con il dotnet publish comando usando l'opzione --no-self-contained o la proprietà /p:SelfContained=falseMSBuild .
Impostare l'identificatore di runtime (RID) usando uno degli approcci seguenti:
Opzione 1: Impostare il RID in un
<PropertyGroup>nel Server file di progetto:<RuntimeIdentifier>{RID}</RuntimeIdentifier>Nella configurazione precedente, il segnaposto
{RID}è l'identificatore di runtime (RID).Pubblica l'app nella configurazione Release del progetto Server.
dotnet publish -c ReleaseOpzione 2: Passare il RID nel comando
dotnet publishcome proprietà di MSBuild (/p:RuntimeIdentifier), non con l'opzione-r|--runtime.dotnet publish -c Release /p:RuntimeIdentifier={RID}Nel comando precedente il
{RID}segnaposto è l'identificatore di runtime (RID).
Per altre informazioni, vedere gli articoli seguenti:
Distribuzione autonoma
Una distribuzione autonoma serve l'app come un set di file statici richiesti direttamente dai clienti. Qualsiasi file server statico è in grado di gestire l'app Blazor .
Gli asset di distribuzione autonomi vengono pubblicati nella cartella /bin/Release/{TARGET FRAMEWORK}/publish/wwwroot o bin/Release/{TARGET FRAMEWORK}/browser-wasm/publish, dove il segnaposto {TARGET FRAMEWORK} è il framework di destinazione.
Servizio app di Azure
Blazor WebAssembly Le app possono essere distribuite in Servizi app di Azure in Windows, che ospita l'app in IIS.
La distribuzione di un'app autonoma Blazor WebAssembly nel servizio app Azure per Linux non è attualmente supportata. È consigliabile ospitare un'app autonoma Blazor WebAssembly usando App Web statiche di Azure, che supporta questo scenario.
Indipendente con Docker
Un'app autonoma Blazor WebAssembly viene pubblicata come set di file statici per l'hosting da parte di un file server statico.
Per ospitare l'app in Docker:
- Scegliere un contenitore Docker con supporto del server Web, ad esempio Nginx o Apache.
- Copiare gli asset della cartella
publishin una cartella posizionata nel server Web per servire file statici. - Applicare una configurazione aggiuntiva in base alle esigenze per gestire l'app Blazor WebAssembly .
Per indicazioni sulla configurazione, vedere le risorse seguenti:
Valori di configurazione dell'host
Blazor WebAssembly Le app possono accettare i valori di configurazione host seguenti come argomenti della riga di comando in fase di esecuzione nell'ambiente di sviluppo.
Radice del contenuto
L'argomento --contentroot imposta il percorso assoluto della directory che contiene i file di contenuto dell'app (radice del contenuto). Negli esempi seguenti /content-root-path è il percorso radice del contenuto dell'app.
Quando si esegue l'app localmente, passare l'argomento a un prompt dei comandi. Dalla directory dell'app, eseguire:
dotnet watch --contentroot=/content-root-pathAggiungere un'entrata al file dell'app
launchSettings.jsonnel profilo di IIS Express. Questa impostazione viene usata quando l'app viene eseguita con il debugger di Visual Studio e da un prompt dei comandi condotnet watch(odotnet run)."commandLineArgs": "--contentroot=/content-root-path"In Visual Studio, specifica l'argomento in Proprietà>Debug>Argomenti dell'applicazione. L'impostazione dell'argomento nella pagina delle proprietà di Visual Studio aggiunge l'argomento al file
launchSettings.json.--contentroot=/content-root-path
Percorso base
L'argomento --pathbase imposta il percorso di base dell'app per un'app eseguita localmente con un percorso URL relativo non radice (il <base> tag href è impostato su un percorso diverso da / quello di staging e produzione). Negli esempi seguenti /relative-URL-path è la base del percorso dell'app. Per ulteriori informazioni, vedere il percorso di base dell'app ASP.NET Core.
Important
A differenza del percorso specificato per href del tag <base>, non includere una barra finale (/) quando si passa il valore dell'argomento --pathbase. Se il percorso di base dell'app viene specificato nel tag <base> come <base href="/CoolApp/"> (inclusa una barra finale), passare il valore dell'argomento della riga di comando come --pathbase=/CoolApp (senza barra finale).
Quando si esegue l'app localmente, passare l'argomento a un prompt dei comandi. Dalla directory dell'app, eseguire:
dotnet watch --pathbase=/relative-URL-pathAggiungere un'entrata al file dell'app
launchSettings.jsonnel profilo di IIS Express. Questa impostazione viene usata quando si esegue l'app con il debugger di Visual Studio e da un prompt dei comandi condotnet watch(odotnet run)."commandLineArgs": "--pathbase=/relative-URL-path"In Visual Studio, specifica l'argomento in Proprietà>Debug>Argomenti dell'applicazione. L'impostazione dell'argomento nella pagina delle proprietà di Visual Studio aggiunge l'argomento al file
launchSettings.json.--pathbase=/relative-URL-path
Per ulteriori informazioni, vedere il percorso di base dell'app ASP.NET Core.
URLs
L'argomento --urls imposta gli indirizzi IP o gli indirizzi host con le porte e i protocolli su cui ascoltare le richieste.
Quando si esegue l'app localmente, passare l'argomento a un prompt dei comandi. Dalla directory dell'app, eseguire:
dotnet watch --urls=http://127.0.0.1:0Aggiungere un'entrata al file dell'app
launchSettings.jsonnel profilo di IIS Express. Questa impostazione viene usata quando si esegue l'app con il debugger di Visual Studio e da un prompt dei comandi condotnet watch(odotnet run)."commandLineArgs": "--urls=http://127.0.0.1:0"In Visual Studio, specifica l'argomento in Proprietà>Debug>Argomenti dell'applicazione. L'impostazione dell'argomento nella pagina delle proprietà di Visual Studio aggiunge l'argomento al file
launchSettings.json.--urls=http://127.0.0.1:0
Configurare il trimmer
Blazor esegue il taglio del linguaggio intermedio (IL) in ogni build di rilascio per rimuovere il codice IL non necessario dagli assembly di output. Per altre informazioni, vedere Configurare Trimmer per ASP.NET Core Blazor.
Configurare il linker
Blazor esegue il collegamento del linguaggio intermedio (IL) in ogni build di rilascio per rimuovere il codice IL non necessario dagli assembly di output. Per altre informazioni, vedere Configurare il linker per ASP.NET Core Blazor.
Modificare l'estensione dei file DLL
Questa sezione si applica a .NET 5 a .NET 7. In .NET 8 o versioni successive, gli assembly .NET vengono distribuiti come file WebAssembly (.wasm) usando il formato di file Webcil.
Se un firewall, un programma antivirus o un'appliance di sicurezza di rete blocca la trasmissione dei file DLL (Dynamic Link Library) dell'app (.dll), è possibile seguire le indicazioni riportate in questa sezione per modificare le estensioni dei nomi di file dei file DLL pubblicati dell'app.
La modifica delle estensioni di file dei file DLL dell'app potrebbe non risolvere il problema perché molti sistemi di sicurezza analizzano il contenuto dei file dell'app, non semplicemente controllano le estensioni di file.
Per un approccio più affidabile negli ambienti che bloccano il download e l'esecuzione di file DLL, adottare uno degli approcci seguenti:
- Usare .NET 8 o versione successiva, che impacchetta assembly .NET come file WebAssembly (
.wasm) usando il formato di file Webcil. Per altre informazioni, vedere la sezione Formato di creazione di pacchetti Webcil per assembly .NET in una versione .NET 8 o successiva di questo articolo. - In .NET 6 o versione successiva usare un layout di distribuzione personalizzato.
Esistono approcci di terze parti per la gestione di questo problema. Per altre informazioni, vedere le risorse in Awesome Blazor.
Dopo la pubblicazione dell'app, usare uno script shell o una pipeline di compilazione DevOps per rinominare i file .dll in modo che utilizzino un'estensione di file diversa nella directory dell'output pubblicato dell'app.
Negli esempi seguenti:
- PowerShell (PS) viene usato per aggiornare le estensioni di file.
-
.dlli file vengono rinominati per utilizzare l'estensione di file.bindalla riga di comando. - I file elencati nel manifesto di avvio pubblicato Blazor con estensione
.dllvengono aggiornati all'estensione.bin. - Se sono in uso anche gli asset dei service worker, un comando di PowerShell aggiorna i file elencati nel
.dllfile all'estensioneservice-worker-assets.js.
Per usare un'estensione di file diversa da .bin, sostituire .bin nei comandi seguenti con l'estensione di file desiderata.
Nei comandi seguenti, il segnaposto {PATH} rappresenta il percorso alla cartella pubblicata _framework nella cartella publish.
Rinominare le estensioni di file nella cartella :
dir {PATH} | rename-item -NewName { $_.name -replace ".dll\b",".bin" }
Rinominare le estensioni di file nel blazor.boot.json file:
((Get-Content {PATH}\blazor.boot.json -Raw) -replace '.dll"','.bin"') | Set-Content {PATH}\blazor.boot.json
Se gli asset di lavoro del servizio sono in uso anche perché l'app è un'app Web progressiva :If service worker assets are also in use because the app is a Progressive Web App (PWA):
((Get-Content {PATH}\service-worker-assets.js -Raw) -replace '.dll"','.bin"') | Set-Content {PATH}\service-worker-assets.js
Nel comando precedente il {PATH} segnaposto è il percorso del file pubblicato service-worker-assets.js .
Per risolvere il file compresso blazor.boot.json , adottare uno degli approcci seguenti:
- Ricomprimere il file aggiornato
blazor.boot.json, producendo nuoviblazor.boot.json.gzfile eblazor.boot.json.br. (Recommended) - Rimuovere i file compressi
blazor.boot.json.gzeblazor.boot.json.br. La compressione è disabilitata con questo approccio.
Per un file compresso di service-worker-assets.js adottare uno degli approcci seguenti:
- Ricomprimere il file aggiornato
service-worker-assets.js, producendo nuoviservice-worker-assets.js.brfile eservice-worker-assets.js.gz. (Recommended) - Rimuovere i file compressi
service-worker-assets.js.gzeservice-worker-assets.js.br. La compressione è disabilitata con questo approccio.
Per automatizzare la modifica dell'estensione in Windows in .NET 6/7, l'approccio seguente usa uno script di PowerShell posizionato nella radice del progetto. Lo script seguente, che disabilita la compressione, è la base per ulteriori modifiche se si desidera ricomprimere il file blazor.boot.json e il file service-worker-assets.js se l'app è una Progressive Web App (PWA). Il percorso della publish cartella viene passato allo script quando viene eseguito.
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
Se le risorse dei service worker sono in uso anche perché l'app è un'app Web progressiva (PWA), aggiungere i comandi seguenti.
((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
Nel file di progetto lo script viene eseguito dopo la pubblicazione dell'app per la Release configurazione:
<Target Name="ChangeDLLFileExtensions" AfterTargets="AfterPublish" Condition="'$(Configuration)'=='Release'">
<Exec Command="powershell.exe -command "& {.\ChangeDLLExtensions.ps1 '$(SolutionDir)'}"" />
</Target>
Dopo aver pubblicato l'app, ricomprimere manualmente blazor.boot.json, e service-worker-assets.js, se usato, per riabilitare la compressione.
Note
Quando si rinominano e caricano gli stessi assembly in modalità lazy, vedere le linee guida in Assembly di caricamento lazy in ASP.NET CoreBlazor WebAssembly.
In genere, il server dell'app richiede la configurazione degli asset statici per gestire i file con l'estensione aggiornata. Per un'app ospitata da IIS, aggiungere una voce della mappa MIME (<mimeMap>) per la nuova estensione di file nella sezione contenuto statico (<staticContent>) in un file personalizzato web.config . Nell'esempio seguente si presuppone che l'estensione del file venga modificata da .dll a .bin:
<staticContent>
...
<mimeMap fileExtension=".bin" mimeType="application/octet-stream" />
...
</staticContent>
Includere un aggiornamento per i file compressi se la compressione è in uso:
<mimeMap fileExtension=".bin.br" mimeType="application/octet-stream" />
<mimeMap fileExtension=".bin.gz" mimeType="application/octet-stream" />
Rimuovere la voce per l'estensione file .dll.
- <mimeMap fileExtension=".dll" mimeType="application/octet-stream" />
Rimuovere le voci per i file compressi .dll se la compressione è in uso:
- <mimeMap fileExtension=".dll.br" mimeType="application/octet-stream" />
- <mimeMap fileExtension=".dll.gz" mimeType="application/octet-stream" />
Per altre informazioni sui file personalizzati web.config , vedere la sezione Uso di un file personalizzato web.config .
Danneggiamento dell'implementazione precedente
In genere durante l'implementazione:
- Vengono sostituiti solo i file modificati, che in genere comportano una distribuzione più rapida.
- I file esistenti che non fanno parte della nuova distribuzione vengono lasciati sul posto per l'uso da parte della nuova distribuzione.
In rari casi, i file persistenti di una distribuzione precedente possono danneggiare una nuova distribuzione. L'eliminazione completa della distribuzione esistente (o dell'app pubblicata in locale prima della distribuzione) può risolvere il problema con una distribuzione danneggiata. Spesso, l'eliminazione della distribuzione esistente una volta è sufficiente per risolvere il problema, anche per una pipeline di compilazione e distribuzione DevOps.
Se si determina che la cancellazione di una distribuzione precedente è sempre necessaria quando è in uso una compilazione DevOps e si distribuisce la pipeline, è possibile aggiungere temporaneamente un passaggio alla pipeline di compilazione per eliminare la distribuzione precedente per ogni nuova distribuzione fino a risolvere la causa esatta del danneggiamento.