Sdílet prostřednictvím


Hostování a nasazení aplikací ASP.NET Core Blazor WebAssembly

Note

Toto není nejnovější verze tohoto článku. Aktuální verzi najdete ve verzi .NET 10 tohoto článku.

Warning

Tato verze ASP.NET Core se už nepodporuje. Další informace najdete v zásadách podpory .NET a .NET Core. Aktuální vydání článku ve verzi .NET 9 najdete zde.

Tento článek vysvětluje, jak hostovat a nasazovat aplikace Blazor WebAssembly.

S modelem Blazor WebAssemblyhostování:

  • Aplikace Blazor , její závislosti a modul runtime .NET se stáhnou paralelně do prohlížeče.
  • Aplikace se spustí přímo ve vlákně uživatelského rozhraní prohlížeče.

Tento článek se týká scénáře nasazení, ve kterém Blazor je aplikace umístěná na statickém hostitelském webovém serveru nebo službě, .NET se nepoužívá k poskytování Blazor aplikace. Tato strategie je popsána v části Samostatné nasazení a dalších článcích v tomto uzlu pro službu IIS, služby Azure, Apache, Nginx a GitHub Pages.

Podporují se následující strategie nasazení:

  • Aplikaci Blazor obsluhuje aplikace ASP.NET Core. Tato strategie je pokryta v části hostované nasazení pomocí ASP.NET Core.
  • Aplikace Blazor je umístěná na statickém hostitelském webovém serveru nebo službě, kde se k poskytování Blazor aplikace nepoužívá .NET. Tato strategie je popsána v části Samostatné nasazení, která obsahuje informace o hostování Blazor WebAssembly aplikace jako podaplikace služby IIS.
  • Aplikace ASP.NET Core hostuje více Blazor WebAssembly aplikací. Další informace naleznete v tématu Více hostovaných aplikací ASP.NET Core.

Subdoména a hostování sub-aplikace IIS

Hostování subdomény nevyžaduje zvláštní konfiguraci aplikace. Pro hostování aplikace v subdoméně nemusíte konfigurovat základní cestu aplikace (značka ve ).

Hostování dílčích aplikací služby IIS vyžaduje , abyste nastavili základní cestu aplikace. Další informace a křížové odkazy na další pokyny k hostování dílčích aplikací služby IIS naleznete v tématu Hostitel a nasazení ASP.NET Core Blazor.

Zmenšení maximální velikosti haldy u některých prohlížečů mobilních zařízení

Při budování Blazor aplikace, která běží na klientském zařízení (.Client projektu Blazor Web App nebo samostatné Blazor WebAssembly aplikace) a je zaměřena na prohlížeče mobilních zařízení, zejména Safari v systému iOS, je nutné snížit maximální paměť aplikace pomocí vlastnosti EmccMaximumHeapSize MSBuild. Výchozí hodnota je 2 147 483 648 bajtů, což může být příliš velký objem a aplikace může selhat, pokud se pokusí přidělit více paměti, kterou prohlížeč neposkytne. Následující příklad nastaví hodnotu na 268 435 456 bajtů v Program souboru:

Při vytváření Blazor WebAssembly aplikace, která cílí na prohlížeče mobilních zařízení, zejména Safari v iOSu, může být vyžadováno snížení maximální paměti pro aplikaci pomocí vlastnosti EmccMaximumHeapSize MSBuild. Výchozí hodnota je 2 147 483 648 bajtů, což může být příliš velký objem a aplikace může selhat, pokud se pokusí přidělit více paměti, kterou prohlížeč neposkytne. Následující příklad nastaví hodnotu na 268 435 456 bajtů v Program souboru:

<EmccMaximumHeapSize>268435456</EmccMaximumHeapSize>

Další informace o vlastnostech a cílech nástroje Mono/WebAssembly MSBuild najdete v tématu WasmApp.Common.targets (dotnet/runtime úložiště GitHub).

Formát balení Webcil pro sestavení .NET

Webcil je webový formát balení pro sestavení .NET navržený tak, aby umožňoval použití Blazor WebAssembly v omezujících síťových prostředích. Soubory webcilu používají standardní obálku WebAssembly, kde jsou sestavení nasazena jako soubory WebAssembly, které používají standardní .wasm příponu souboru.

Webcil je výchozí formát balení při publikování Blazor WebAssembly aplikace. Chcete-li zakázat použití Webcil, nastavte v souboru projektu aplikace následující vlastnost MSBuild:

<PropertyGroup>
  <WasmEnableWebcil>false</WasmEnableWebcil>
</PropertyGroup>

Přizpůsobte způsob načítání spouštěcích prostředků

Přizpůsobte, jak se načítají spouštěcí prostředky pomocí API loadBootResource. Další informace najdete v tématu ASP.NET Core Blazor startup.

Compression

Blazor WebAssembly Když je aplikace publikovaná, výstup se během publikování staticky komprimuje, aby se snížila velikost aplikace a odstranila režijní náklady na kompresi za běhu. Používají se následující algoritmy komprese:

Blazor spoléhá na hostitele, aby obsluhoval příslušné komprimované soubory. Při hostování Blazor WebAssembly samostatné aplikace může být potřeba další práce, aby se zajistilo, že se budou obsluhovat staticky komprimované soubory:

Blazor spoléhá na hostitele, aby obsluhoval příslušné komprimované soubory. Při použití projektu hostovanéhoBlazor WebAssembly v ASP.NET Core je hostitelský projekt schopný provádět vyjednávání obsahu a obsluhovat staticky komprimované soubory. Při hostování Blazor WebAssembly samostatné aplikace může být potřeba další práce, aby se zajistilo, že se budou obsluhovat staticky komprimované soubory:

  • Informace o konfiguraci komprese služby IIS web.config naleznete v části „IIS: Brotli a Gzip compression“.
  • Při hostování na statických hostitelských řešeních, která nepodporují staticky komprimované vyjednávání obsahu souborů, zvažte konfiguraci aplikace pro načtení a dekódování komprimovaných souborů Brotli:

Získejte dekodér JavaScript Brotli z google/brotli úložiště GitHub. Minifikovaný soubor dekodéru se jmenuje decode.min.js a nachází se ve složcejs.

Note

Pokud minifikovaná verze decode.js skriptu (decode.min.js) selže, zkuste místo toho použít neminifikovanou verzi (decode.js).

Aktualizujte aplikaci tak, aby používala dekodér.

wwwroot/index.html Nastavte autostart na false ve značce Blazor souboru <script>:

<script src="_framework/blazor.webassembly.js" autostart="false"></script>

Blazor Za značku <script> a před koncovou značku </body> přidejte následující blok kódu JavaScriptu <script>. Následující funkce volá fetch s cache: 'no-cache', aby se mezipaměť prohlížeče aktualizovala.

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>

Samostatné 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>

Další informace o načítání spouštěcích prostředků najdete v tématu ASP.NET Core Blazor spuštění.

Pokud chcete zakázat kompresi, přidejte CompressionEnabled do souboru projektu aplikace vlastnost MSBuild a nastavte hodnotu na false:

<PropertyGroup>
  <CompressionEnabled>false</CompressionEnabled>
</PropertyGroup>

CompressionEnabled Vlastnost můžete předat dotnet publish příkazu s následující syntaxí v příkazové řádce:

dotnet publish -p:CompressionEnabled=false

Pokud chcete zakázat kompresi, přidejte BlazorEnableCompression do souboru projektu aplikace vlastnost MSBuild a nastavte hodnotu na false:

<PropertyGroup>
  <BlazorEnableCompression>false</BlazorEnableCompression>
</PropertyGroup>

BlazorEnableCompression Vlastnost můžete předat dotnet publish příkazu s následující syntaxí v příkazové řádce:

dotnet publish -p:BlazorEnableCompression=false

Přepsání adres URL pro správné směrování

Žádosti o směrování pro součásti stránek v Blazor WebAssembly aplikaci nejsou tak jednoduché jako žádosti o směrování v Blazor Server aplikaci. Blazor WebAssembly Zvažte aplikaci se dvěma komponentami:

  • Main.razor: Načte se v kořenovém adresáři aplikace a obsahuje odkaz na komponentu About (href="About").
  • About.razor: About komponenta.

Když se požaduje výchozí dokument aplikace pomocí adresního řádku prohlížeče (například https://www.contoso.com/):

  1. Prohlížeč odešle žádost.
  2. Vrátí se výchozí stránka, což je obvykle index.html.
  3. index.html inicializuje aplikaci.
  4. Router komponenta se načte a komponenta RazorMain se vykreslí.

Na hlavní stránce, vybráním odkazu na komponentu About funguje na klientovi, protože Blazor směrovač zastaví prohlížeč, aby neodeslal požadavek na Internet k www.contoso.com pro About a sám obsluhuje vykreslenou komponentu About. Všechny požadavky na interní endpointy v aplikaci Blazor WebAssembly fungují stejným způsobem: Požadavky nevyvolávají požadavky na základě prohlížeče na zdroje hostované na serveru na internetu. Směrovač zpracovává požadavky interně.

Pokud je žádost prováděna přes adresní řádek prohlížeče na www.contoso.com/About, požadavek selže. Na internetovém hostiteli aplikace neexistuje žádný takový prostředek, takže se vrátí odpověď 404 – Nenalezena .

Vzhledem k tomu, že prohlížeče pořadují požadavky na internetové hostitele pro klientské stránky, webové servery a hostitelské služby musí přepsat všechny požadavky na prostředky, které nejsou fyzicky na serveru, na stránku index.html. Jakmile se index.html vrátí, směrovač aplikace Blazor převezme řízení a odpoví správným prostředkem.

Při nasazování na server služby IIS můžete použít modul URL Rewrite s publikovaným souborem aplikace web.config. Další informace najdete v tématu Hostování a nasazení ASP.NET Core Blazor WebAssembly se službou IIS.

Hostované nasazení s ASP.NET Core

Hostované nasazení doručuje Blazor WebAssembly aplikaci do prohlížečů z aplikace ASP.NET Core, která běží na webovém serveru.

Klientská aplikace se publikuje do Blazor WebAssembly složky serverové /bin/Release/{TARGET FRAMEWORK}/publish/wwwroot aplikace spolu s dalšími statickými webovými prostředky serverové aplikace. Obě aplikace se nasadí společně. Vyžaduje se webový server, který dokáže hostovat aplikaci ASP.NET Core. Pro hostované nasazení sada Visual Studio obsahuje Blazor WebAssembly šablonu projektu aplikace (blazorwasm šablonu při použití dotnet new příkazu) s vybranou Hosted možností (-ho|--hosted při použití dotnet new příkazu).

Další informace najdete v následujících článcích:

Hostované nasazení spustitelného souboru závislého na rozhraní pro konkrétní platformu

Pokud chcete nasadit hostovanou Blazor WebAssembly aplikaci jako spustitelný soubor závislý na rozhraní pro konkrétní platformu (není samostatně obsažený), použijte následující doprovodné materiály založené na používaném nástroji.

Visual Studio

Pro nasazení typu samosprávného je nastaveno generovaný publikační profil (.pubxml). Ověřte, že Server profil publikování projektu obsahuje <SelfContained> vlastnost MSBuild nastavenou na false.

V souboru publikačního profilu .pubxml ve složce projektu ServerProperties:

<SelfContained>false</SelfContained>

Nastavte identifikátor modulu runtime (RID) pomocí nastavení cílového modulu runtime v oblasti Nastavení uživatelského rozhraní pro publikování, která vygeneruje <RuntimeIdentifier> vlastnost MSBuild v profilu publikování:

<RuntimeIdentifier>{RID}</RuntimeIdentifier>

V předchozí konfiguraci je zástupný symbol {RID} identifikátor běhového prostředí (RID).

Publikujte Server projekt v režimu Release.

Note

Je možné publikovat aplikaci s publikačním profilem pomocí .NET CLI tím, že předáte /p:PublishProfile={PROFILE} příkazu dotnet publish, kde {PROFILE} je zástupný symbol profilu. Další informace najdete v částech Profilů publikování a Příklad publikování složky v článku Profily publikování sady Visual Studio (.pubxml) pro nasazení aplikace ASP.NET Core. Pokud předáte identifikátor RID v dotnet publish příkazu a ne v profilu publikování, použijte vlastnost MSBuild (/p:RuntimeIdentifier) s příkazem, nikoli s možností -r|--runtime.

.NET CLI

Nakonfigurujte nasazení jako samostatné umístěním vlastnosti <SelfContained> MSBuild do <PropertyGroup> v souboru projektu Server, a nastavte ji na false.

<SelfContained>false</SelfContained>

Important

Vlastnost SelfContained musí být umístěna v souboru projektu Server. Vlastnost nelze správně nastavit pomocí příkazu dotnet publish, možnosti --no-self-contained nebo vlastnosti MSBuild /p:SelfContained=false.

Identifikátor modulu runtime (RID) nastavte pomocí některého z následujících přístupů:

  • Možnost 1: Nastavte identifikátor RID v <PropertyGroup> souboru projektu Server.

    <RuntimeIdentifier>{RID}</RuntimeIdentifier>
    

    V předchozí konfiguraci je zástupný symbol {RID} identifikátor běhového prostředí (RID).

    Publikujte aplikaci v konfiguraci uvolnění z Server projektu:

    dotnet publish -c Release
    
  • Možnost 2: Předání identifikátoru RID v příkazu dotnet publish jako vlastnost MSBuild (/p:RuntimeIdentifier), a nikoli pomocí možnosti -r|--runtime:

    dotnet publish -c Release /p:RuntimeIdentifier={RID}
    

    V předchozím příkazu je {RID} zástupným symbolem pro identifikátor prostředí (RID).

Další informace najdete v následujících článcích:

Samostatné nasazení

Samostatné nasazení slouží Blazor WebAssembly aplikaci jako sada statických souborů, které jsou přímo vyžadovány klienty. Kterýkoli statický souborový server je schopen poskytovat aplikaci Blazor.

Samostatné prostředky nasazení se publikují do složky /bin/Release/{TARGET FRAMEWORK}/publish/wwwroot nebo bin/Release/{TARGET FRAMEWORK}/browser-wasm/publish, kde {TARGET FRAMEWORK} je zástupný symbol pro cílovou platformu.

Azure App Service

Blazor WebAssembly aplikace je možné nasadit do Azure App Services ve Windows, který je hostitelem aplikace ve službě IIS.

Nasazení samostatné Blazor WebAssembly aplikace do služby Aplikace Azure Service pro Linux se v současné době nepodporuje. Doporučujeme hostovat samostatnou Blazor WebAssembly aplikaci pomocí Azure Static Web Apps, která tento scénář podporuje.

Samostatný s Dockerem

Samostatná Blazor WebAssembly aplikace se publikuje jako sada statických souborů pro hostování statickým souborovým serverem.

Hostování aplikace v Dockeru:

  • Zvolte kontejner Dockeru s podporou webového serveru, například Nginx nebo Apache.
  • Zkopírujte soubory složky publish do určené složky na webovém serveru pro obsluhu statických souborů.
  • Podle potřeby použijte další konfiguraci pro obsluhu Blazor WebAssembly aplikace.

Pokyny ke konfiguraci najdete v následujících zdrojích informací:

Hodnoty konfigurace hostitele

Blazor WebAssembly aplikace mohou přijmout následující hodnoty konfigurace hostitele jako argumenty příkazového řádku za běhu ve vývojovém prostředí.

Kořenový adresář obsahu

Argument --contentroot nastaví absolutní cestu k adresáři, který obsahuje soubory obsahu aplikace (kořen obsahu). V následujících příkladech je /content-root-path kořenovou cestou obsahu aplikace.

  • Předejte argument při místním spuštění aplikace na příkazovém řádku. V adresáři aplikace spusťte:

    dotnet watch --contentroot=/content-root-path
    
  • Přidejte položku do souboru aplikace launchSettings.json v profilu IIS Express. Toto nastavení se používá při spuštění aplikace pomocí ladicího programu sady Visual Studio a z příkazového řádku s dotnet watch (nebo dotnet run).

    "commandLineArgs": "--contentroot=/content-root-path"
    
  • V sadě Visual Studio zadejte argument v části Vlastnosti>Ladění>Argumenty aplikace. Nastavení argumentu na stránce vlastností sady Visual Studio přidá argument do launchSettings.json souboru.

    --contentroot=/content-root-path
    

Základ cesty

Argument --pathbase nastaví základní cestu aplikace pro aplikaci spuštěnou místně s jinou než kořenovou relativní cestou URL ( <base> značka href je nastavená na jinou cestu než / pro přípravu a produkční prostředí). V následujících příkladech je /relative-URL-path základní cesta aplikace. Další informace najdete v ASP.NET Core Blazor základní cestě aplikace.

Important

Na rozdíl od cesty poskytnuté pro značky href<base>, nepřidávejte koncové lomítko (/) při předávání hodnoty argumentu --pathbase. Pokud je základní cesta aplikace ve <base> značce zadaná jako <base href="/CoolApp/"> (obsahuje koncové lomítko), předejte hodnotu argumentu příkazového řádku jako --pathbase=/CoolApp (bez koncového lomítka).

  • Předejte argument při místním spuštění aplikace na příkazovém řádku. V adresáři aplikace spusťte:

    dotnet watch --pathbase=/relative-URL-path
    
  • Přidejte položku do souboru aplikace launchSettings.json v profilu IIS Express. Toto nastavení se používá při spuštění aplikace pomocí ladicího programu sady Visual Studio a z příkazového řádku s dotnet watch (nebo dotnet run).

    "commandLineArgs": "--pathbase=/relative-URL-path"
    
  • V sadě Visual Studio zadejte argument v části Vlastnosti>Ladění>Argumenty aplikace. Nastavení argumentu na stránce vlastností sady Visual Studio přidá argument do launchSettings.json souboru.

    --pathbase=/relative-URL-path
    

Další informace najdete v ASP.NET Core Blazor základní cestě aplikace.

URLs

Argument --urls nastaví IP adresy nebo hostitelské adresy s porty a protokoly pro naslouchání požadavkům.

  • Předejte argument při místním spuštění aplikace na příkazovém řádku. V adresáři aplikace spusťte:

    dotnet watch --urls=http://127.0.0.1:0
    
  • Přidejte položku do souboru aplikace launchSettings.json v profilu IIS Express. Toto nastavení se používá při spuštění aplikace pomocí ladicího programu sady Visual Studio a z příkazového řádku s dotnet watch (nebo dotnet run).

    "commandLineArgs": "--urls=http://127.0.0.1:0"
    
  • V sadě Visual Studio zadejte argument v části Vlastnosti>Ladění>Argumenty aplikace. Nastavení argumentu na stránce vlastností sady Visual Studio přidá argument do launchSettings.json souboru.

    --urls=http://127.0.0.1:0
    

Nakonfigurujte ořezávač

Blazor provádí oříznutí zprostředkujícího jazyka (IL) na každém sestavení vydané verze, aby se z výstupních sestavení odebrala nepotřebná il. Další informace naleznete v tématu Konfigurace trimmeru pro ASP.NET Core Blazor.

Konfigurace překladače Linker

Blazor provádí spojování zprostředkujícího jazyka (IL) u každého sestavení verze pro vydání, aby se z výstupních sestavení odebraly nepotřebné IL. Další informace najdete v tématu Konfigurace linkeru pro ASP.NET Core Blazor.

Změna přípony názvu souboru DLL

Tato část platí pro .NET 5 až .NET 7. V .NET 8 nebo novějších jsou sestavení .NET nasazena jako soubory WebAssembly (.wasm) pomocí formátu souboru Webcil.

Pokud brána firewall, antivirový program nebo zařízení pro zabezpečení sítě blokuje přenos souborů knihovny DLL aplikace (.dll), můžete podle pokynů v této části změnit přípony názvů souborů publikované knihovny DLL aplikace.

Změna přípon názvů souborů DLL aplikace nemusí tento problém vyřešit, protože mnoho systémů zabezpečení kontroluje obsah souborů aplikace, nikoli pouze kontrolovat přípony souborů.

Pokud chcete robustnější přístup v prostředích, která blokují stahování a spouštění souborů DLL, použijte některý z následujících přístupů:

  • Použijte .NET 8 nebo novější, který balí sestavení .NET jako soubory WebAssembly (.wasm) ve formátu souboru Webcil. Další informace naleznete v sekci obalového formátu Webcil pro sestavení .NET v .NET 8 či novější verzi tohoto článku.
  • V .NET 6 nebo novějším použijte vlastní rozložení nasazení.

Pro řešení tohoto problému existují přístupy třetích stran. Další informace naleznete na webu Awesome Blazor.

Po publikování aplikace použijte skript prostředí nebo kanál buildu DevOps k přejmenování souborů s příponou .dll tak, aby používaly jinou příponu souboru v adresáři publikovaného výstupu aplikace.

V následujících příkladech:

  • K aktualizaci přípon souborů se používá PowerShell (PS).
  • Soubory .dll jsou přejmenovány, aby používaly příponu souboru .bin z příkazového řádku.
  • Soubory uvedené v publikovaném Blazor spouštěcím manifestu s příponou .dll souboru se aktualizují na příponu .bin souboru.
  • Pokud se také používají prostředky service worker, příkaz PowerShellu aktualizuje .dll soubory uvedené v service-worker-assets.js souboru na .bin příponu souboru.

Chcete-li použít jinou příponu souboru než .bin, nahraďte .bin v následujících příkazech požadovanou příponou souboru.

V následujících příkazech je zástupný symbol {PATH} cestou k publikované složce _framework ve složce publish.

Přejmenujte přípony souborů ve složce:

dir {PATH} | rename-item -NewName { $_.name -replace ".dll\b",".bin" }

Přejmenujte přípony blazor.boot.json souborů v souboru:

((Get-Content {PATH}\blazor.boot.json -Raw) -replace '.dll"','.bin"') | Set-Content {PATH}\blazor.boot.json

Pokud se používají i prostředky pracovního procesu služby, protože aplikace je progresivní webová aplikace (PWA):

((Get-Content {PATH}\service-worker-assets.js -Raw) -replace '.dll"','.bin"') | Set-Content {PATH}\service-worker-assets.js

V předchozím příkazu {PATH} představuje zástupný symbol cestu k publikovanému service-worker-assets.js souboru.

Pokud chcete komprimovaný blazor.boot.json soubor vyřešit, použijte některý z následujících přístupů:

  • Přepracujte aktualizovaný soubor blazor.boot.json, čímž vytvoříte nové soubory blazor.boot.json.gz a blazor.boot.json.br. (Recommended)
  • Odeberte komprimované blazor.boot.json.gz soubory a blazor.boot.json.br soubory. (Komprese je tímto přístupem zakázaná.)

Pro komprimovaný soubor service-worker-assets.js použijte některý z následujících přístupů:

  • Přepracujte aktualizovaný soubor service-worker-assets.js, čímž vytvoříte nové soubory service-worker-assets.js.br a service-worker-assets.js.gz. (Recommended)
  • Odeberte komprimované service-worker-assets.js.gz soubory a service-worker-assets.js.br soubory. (Komprese je tímto přístupem zakázaná.)

K automatizaci změny rozšíření ve Windows v .NET 6/7 používá následující přístup skript PowerShellu umístěný v kořenovém adresáři projektu. Následující skript, který zakáže kompresi, je základem pro další úpravy, pokud chcete rekomprimovat blazor.boot.json soubor a service-worker-assets.js soubor, pokud je aplikace progresivní webovou aplikací (PWA). Cesta ke publish složce se předá skriptu při jeho spuštění.

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

Pokud se používají i prostředky pracovního procesu služby, protože aplikace je progresivní webová aplikace (PWA), přidejte následující příkazy:

((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

V souboru projektu se skript spustí po publikování aplikace pro Release konfiguraci:

<Target Name="ChangeDLLFileExtensions" AfterTargets="AfterPublish" Condition="'$(Configuration)'=='Release'">
  <Exec Command="powershell.exe -command &quot;&amp; {.\ChangeDLLExtensions.ps1 '$(SolutionDir)'}&quot;" />
</Target>

Po publikování aplikace ručně rekomprimujte blazor.boot.json a, pokud se používá, také service-worker-assets.js, abyste znovu povolili kompresi.

Note

Při přejmenování a opožděném načítání stejných sestavení najdete pokyny v opožděné načítání sestavení v ASP.NET Core Blazor WebAssembly.

Server aplikace obvykle vyžaduje konfiguraci statického obsahu pro obsluhu souborů s aktualizovanou příponou. Pro aplikaci hostované službou IIS přidejte položku mapy MIME (<mimeMap>) pro novou příponu souboru v oddílu statického obsahu (<staticContent>) ve vlastním web.config souboru. Následující příklad předpokládá, že přípona souboru je změněna z .dll :.bin

<staticContent>
  ...
  <mimeMap fileExtension=".bin" mimeType="application/octet-stream" />
  ...
</staticContent>

Pokud se komprese používá, uveďte aktualizaci komprimovaných souborů:

<mimeMap fileExtension=".bin.br" mimeType="application/octet-stream" />
<mimeMap fileExtension=".bin.gz" mimeType="application/octet-stream" />

Odeberte položku pro příponu souboru .dll.

- <mimeMap fileExtension=".dll" mimeType="application/octet-stream" />

Odstraňte položky souborů, které byly komprimovány, pokud se používá komprese.

- <mimeMap fileExtension=".dll.br" mimeType="application/octet-stream" />
- <mimeMap fileExtension=".dll.gz" mimeType="application/octet-stream" />

Další informace o vlastních web.config souborech najdete v části Použití vlastního web.config.

Poškození předchozího nasazení

Obvykle při nasazení:

  • Nahradí se jenom soubory, které se změnily, což obvykle vede k rychlejšímu nasazení.
  • Existující soubory, které nejsou součástí nového nasazení, zůstanou na místě pro použití novým nasazením.

Ve výjimečných případech může přetrvání souborů z předchozího nasazení poškodit nové nasazení. Úplné odstranění existujícího nasazení (nebo místně publikované aplikace před nasazením) může vyřešit problém s poškozeným nasazením. K vyřešení problému často stačí jednou odstranit stávající nasazení, a to i v případě buildů a kanálů nasazení DevOps.

Pokud zjistíte, že vymazání předchozího nasazení se vždy vyžaduje, když se používá kanál buildu a nasazení DevOps, můžete dočasně přidat do kanálu buildu krok, který odstraní předchozí nasazení pro každé nové nasazení, dokud neodstraníte přesnou příčinu poškození.