Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Observação
Esta não é a versão mais recente deste artigo. Para informações sobre a versão vigente, confira a versão .NET 9 deste artigo.
Aviso
Esta versão do ASP.NET Core não tem mais suporte. Para obter mais informações, consulte a Política de Suporte do .NET e do .NET Core. Para informações sobre a versão vigente, confira a versão .NET 9 deste artigo.
Importante
Essas informações relacionam-se ao produto de pré-lançamento, que poderá ser substancialmente modificado antes do lançamento comercial. A Microsoft não oferece garantias, expressas ou implícitas, em relação às informações fornecidas aqui.
Para informações sobre a versão vigente, confira a versão .NET 9 deste artigo.
Este artigo explica como hospedar e implantar aplicativos Blazor WebAssembly.
Com o modelo de hospedagem Blazor WebAssembly:
- O aplicativo Blazor, suas dependências e o tempo de execução do .NET são baixados no navegador em paralelo.
- O aplicativo é executado diretamente no thread da interface do usuário do navegador.
Este artigo refere-se ao cenário de implantação no qual o aplicativo Blazor é colocado em um servidor Web ou serviço de hospedagem estática e o .NET não é utilizado para servir o aplicativo Blazor. Essa estratégia é abordada na seção de implantação autônoma e em outros artigos neste nó para IIS, serviços do Azure, Apache, Nginx e GitHub Pages.
Há suporte para as seguintes estratégias de implantação:
- O aplicativo do Blazor é executado por um aplicativo ASP.NET Core. Esta estratégia é abordada na seção Implantação hospedada com o ASP.NET Core.
- O aplicativo do Blazor é colocado em um serviço ou um servidor Web de hospedagem estático, em que o .NET não é usado para atender ao aplicativo do Blazor. Essa estratégia é abordada na seção Implantação autônoma, que inclui informações sobre como hospedar um aplicativo do Blazor WebAssembly como subaplicativo do IIS.
- Um aplicativo do ASP.NET Core hospeda vários aplicativos do Blazor WebAssembly. Para obter mais informações, confira Vários aplicativos Blazor WebAssembly do ASP.NET Core hospedados.
Hospedagem de subdomínio e sub-aplicativo do IIS
A hospedagem de subdomínio não requer uma configuração especial do aplicativo. Você não precisa configurar o caminho básico do aplicativo (a tag <base>
no wwwroot/index.html
) para hospedar o aplicativo em um subdomínio.
A hospedagem do sub-aplicativo do IIS requer que você defina o caminho básico do aplicativo. Para obter mais informações e links cruzados para orientações adicionais sobre a hospedagem de subaplicativos no IIS, veja Hospedar e implantar aplicativos no ASP.NET CoreBlazor.
Diminuir o tamanho máximo do heap para alguns navegadores de dispositivo móvel
Ao criar um aplicativo Blazor que é executado no cliente (projeto .Client
de um Blazor Web App ou aplicativo Blazor WebAssembly autônomo) e destina-se a navegadores de dispositivo móvel, especialmente o Safari no iOS, pode ser necessário diminuir a memória máxima do aplicativo com a propriedade MSBuild EmccMaximumHeapSize
. O valor padrão é 2.147.483.648 bytes, o que pode ser muito grande e resultar no travamento do aplicativo se o aplicativo tentar alocar mais memória com o navegador falhando em concedê-la. O exemplo a seguir define o valor como 268.435.456 bytes no arquivo Program
:
Ao criar um aplicativo Blazor WebAssembly destinado a navegadores de dispositivo móvel, especialmente o Safari no iOS, a diminuição da memória máxima para o aplicativo com a propriedade MSBuild EmccMaximumHeapSize
pode ser necessária. O valor padrão é 2.147.483.648 bytes, o que pode ser muito grande e resultar no travamento do aplicativo se o aplicativo tentar alocar mais memória com o navegador falhando em concedê-la. O exemplo a seguir define o valor como 268.435.456 bytes no arquivo Program
:
<EmccMaximumHeapSize>268435456</EmccMaximumHeapSize>
Para mais informações sobre as propriedades e destinos do Mono/WebAssembly MSBuild, confira WasmApp.Common.targets
(repositório GitHub dotnet/runtime
).
Formato de empacotamento Webcil para assemblies .NET
O Webcil é um formato de empacotamento amigável para assemblies .NET projetado para possibilitar o uso do Blazor WebAssembly em ambientes de rede restritivos. Os arquivos Webcil usam um wrapper WebAssembly padrão, em que os assemblies são implantados como arquivos WebAssembly que usam a extensão de arquivo .wasm
padrão.
O Webcil é o formato de empacotamento padrão quando você publica um aplicativo Blazor WebAssembly. Para desabilitar o uso do Webcil, defina a seguinte propriedade MSBuild no arquivo de projeto do aplicativo:
<PropertyGroup>
<WasmEnableWebcil>false</WasmEnableWebcil>
</PropertyGroup>
Personalizar a forma como os recursos de inicialização são carregados
Personalize a forma como os recursos de inicialização são carregados usando a API do loadBootResource
. Para obter mais informações, confira Inicialização Blazor do ASP.NET Core.
Compactação
Quando um aplicativo do Blazor WebAssembly é publicado, a saída é compactada estaticamente durante a publicação para reduzir o tamanho do aplicativo e remover a sobrecarga para compactação de runtime. Os seguintes algoritmos de compactação são usados:
Blazor depende do host para atender aos arquivos compactados apropriados. Ao hospedar um aplicativo autônomo Blazor WebAssembly, pode ser necessário um trabalho adicional para garantir que arquivos compactados estaticamente sejam servidos:
Blazor depende do host para atender aos arquivos compactados apropriados. Ao usar um projeto Hospedado pelo ASP.NET CoreBlazor WebAssembly, o projeto host pode executar a negociação de conteúdo e atender aos arquivos compactados estaticamente. Ao hospedar um aplicativo autônomo Blazor WebAssembly, pode ser necessário um trabalho adicional para garantir que arquivos compactados estaticamente sejam servidos:
- Para configuração de compactação
web.config
do IIS, confira a seção IIS: compactação de Brotli e Gzip. - Ao fazer a hospedagem em soluções de hospedagem estáticas que não dão suporte à negociação de conteúdo de arquivo compactado estaticamente, considere a configuração do aplicativo para buscar e decodificar arquivos compactados em Brotli:
Obtenha o decodificador JavaScript Brotli no google/brotli
repositório GitHub. O arquivo de decodificador minimizado é chamado de decode.min.js
e encontrado na pasta js
do repositório.
Observação
Se a versão minimizada do script decode.js
(decode.min.js
) falhar, tente usar a versão não minimizada (decode.js
).
Atualize o aplicativo para usar o decodificador.
No arquivo wwwroot/index.html
, defina autostart
como false
na tag Blazor de <script>
:
<script src="_framework/blazor.webassembly.js" autostart="false"></script>
Após a marca <script>
do Blazor e antes da marca </body>
de fechamento, adicione o bloco <script>
de código JavaScript a seguir. A função a seguir chama fetch
com cache: 'no-cache'
para manter o cache do navegador atualizado.
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>
Blazor WebAssembly autônomo:
<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>
Para obter mais informações sobre como carregar recursos de inicialização, confira Inicialização Blazor do AsP.NET Core.
Para desabilitar a compactação, adicione a propriedade do MSBuild CompressionEnabled
ao arquivo de projeto do aplicativo e defina o valor como false
:
<PropertyGroup>
<CompressionEnabled>false</CompressionEnabled>
</PropertyGroup>
A propriedade CompressionEnabled
pode ser passada para o comando dotnet publish
com a seguinte sintaxe em um shell de comando:
dotnet publish -p:CompressionEnabled=false
Para desabilitar a compactação, adicione a propriedade do MSBuild BlazorEnableCompression
ao arquivo de projeto do aplicativo e defina o valor como false
:
<PropertyGroup>
<BlazorEnableCompression>false</BlazorEnableCompression>
</PropertyGroup>
A propriedade BlazorEnableCompression
pode ser passada para o comando dotnet publish
com a seguinte sintaxe em um shell de comando:
dotnet publish -p:BlazorEnableCompression=false
Reescrever as URLs para obter o roteamento correto
O roteamento de solicitações para componentes de página em um aplicativo Blazor WebAssembly não é tão simples quanto o roteamento de solicitações em um aplicativo Blazor Server. Considere um app Blazor WebAssembly com dois componentes:
Main.razor
: é carregado na raiz do aplicativo e contém um link para o componenteAbout
(href="About"
).About.razor
: componenteAbout
.
Quando o documento padrão do aplicativo é solicitado usando a barra de endereços do navegador (por exemplo, https://www.contoso.com/
):
- O navegador faz uma solicitação.
- A página padrão é retornada, que geralmente é
index.html
. index.html
inicia o aplicativo.- O componente Router é carregado e o componente Razor
Main
é renderizado.
Na página principal, a seleção do link para o componente About
funciona no cliente porque o roteador do Blazor impede que o navegador faça uma solicitação na Internet para o www.contoso.com
no About
e atende ao próprio componente About
renderizado. Todas as solicitações de endpoints internos dentro do aplicativo Blazor WebAssembly funcionam da mesma maneira: as solicitações não geram requisições do navegador para recursos hospedados em servidores na Internet. O roteador trata das solicitações internamente.
Se uma solicitação for feita usando a barra de endereços do navegador para www.contoso.com/About
, a solicitação falhará. Este recurso não existe no host do aplicativo na Internet; portanto, uma resposta 404 – Não Encontrado é retornada.
Como os navegadores fazem solicitações aos hosts baseados na Internet de páginas do lado do cliente, os servidores Web e os serviços de hospedagem precisam reescrever todas as solicitações de recursos que não estão fisicamente no servidor para a página index.html
. Quando index.html
for retornado, o roteador Blazor do aplicativo assumirá o controle e responderá com o recurso correto.
Ao implantar em um servidor IIS, você pode usar o Módulo de Reescrita de URL com o arquivo web.config
publicado do aplicativo. Para obter mais informações, consulte Hospedar e implantar ASP.NET Core Blazor WebAssembly com o IIS.
Implantação hospedada com o ASP.NET Core
Uma implantação hospedada disponibiliza o aplicativo para os navegadores a partir de um Blazor WebAssembly que é executado em um servidor web.
O aplicativo Blazor WebAssembly cliente é publicado na pasta /bin/Release/{TARGET FRAMEWORK}/publish/wwwroot
do aplicativo de servidor, juntamente com qualquer outro ativo Web estático do aplicativo de servidor. Os dois aplicativos são implantados juntos. É necessário um servidor Web capaz de hospedar um aplicativo do ASP.NET Core. Para uma implantação hospedada, o Visual Studio inclui o modelo de projeto do Blazor WebAssemblyAplicativo (modelo do blazorwasm
ao usar o comando dotnet new
) com a opção Hosted
selecionada (-ho|--hosted
ao usar o comando dotnet new
).
Para obter mais informações, consulte os seguintes artigos:
- Hospedagem e implantação de aplicativos do ASP.NET Core: hospedar e implantar o ASP.NET Core
- Implantação para o Serviço de Aplicativo do Azure: publicar um aplicativo do ASP.NET Core no Azure com o Visual Studio
- Modelos de projeto Blazor: estrutura de projeto Blazor do ASP.NET Core
Implantação hospedada de um arquivo executável dependente de estrutura para uma plataforma específica
Para implantar um aplicativo do Blazor WebAssembly hospedado como um executável dependente de estrutura para uma plataforma específica (não independente), use as diretrizes a seguir com base nas ferramentas em uso.
Visual Studio
Uma implantação autônoma é configurada para um perfil de publicação gerado (.pubxml
). Confirme se o perfil de publicação do projeto do Server contém a propriedade do MSBuild <SelfContained>
definida como false
.
No arquivo de perfil de publicação do .pubxml
na Server pasta Properties
do projeto:
<SelfContained>false</SelfContained>
Defina o RID (Identificador de Runtime) usando a configuração Runtime de Alvo na área de Configurações da interface de Publicação, que gera a propriedade do MSBuild <RuntimeIdentifier>
no perfil de publicação:
<RuntimeIdentifier>{RID}</RuntimeIdentifier>
Na configuração anterior, o espaço reservado {RID}
é o RID (Identificador de Runtime).
Publique o projeto Server na configuração Lançamento.
Observação
É possível publicar um aplicativo com as configurações de perfil de publicação usando a CLI do .NET passando /p:PublishProfile={PROFILE}
para o comando dotnet publish
, em que o espaço reservado {PROFILE}
é o perfil. Para obter mais informações, consulte as seções Perfis de Publicação e Exemplo de Publicação de Pasta no artigo Perfis de Publicação do Visual Studio (.pubxml) para implantação de aplicativos ASP.NET Core. Se você passar o RID no comando dotnet publish
e não no perfil de publicação, use a propriedade do MSBuild (/p:RuntimeIdentifier
) com o comando, não com a opção -r|--runtime
CLI do .NET
Configure uma implantação independente colocando a propriedade do MSBuild <SelfContained>
em um <PropertyGroup>
no arquivo de projeto do projeto Server definido como false
:
<SelfContained>false</SelfContained>
Importante
A propriedade SelfContained
deve ser colocada no arquivo de projeto do projeto Server. A propriedade não pode ser definida corretamente com o comando dotnet publish
usando a opção --no-self-contained
ou a propriedade MSBuild /p:SelfContained=false
.
Defina o RID (Identificador de Runtime) usando uma das seguintes abordagens:
Opção 1: defina o RID em um
<PropertyGroup>
no Server arquivo de projeto do projeto:<RuntimeIdentifier>{RID}</RuntimeIdentifier>
Na configuração anterior, o espaço reservado
{RID}
é o RID (Identificador de Runtime).Publique o aplicativo na configuração de liberação do projeto Server:
dotnet publish -c Release
Opção 2: passe o RID no comando
dotnet publish
como a propriedade do MSBuild (/p:RuntimeIdentifier
), não com a opção-r|--runtime
:dotnet publish -c Release /p:RuntimeIdentifier={RID}
Na configuração anterior, o espaço reservado
{RID}
é o RID (Identificador de Runtime).
Para obter mais informações, consulte os seguintes artigos:
Implantação autônoma
Uma implantação autônoma atende ao aplicativo do Blazor WebAssembly como um conjunto de arquivos estáticos que são solicitados diretamente pelos clientes. Qualquer servidor de arquivos estático é capaz de atender ao aplicativo do Blazor.
Os ativos de implantação autônomos são publicados na pasta /bin/Release/{TARGET FRAMEWORK}/publish/wwwroot
ou bin/Release/{TARGET FRAMEWORK}/browser-wasm/publish
, onde o espaço reservado {TARGET FRAMEWORK}
é a estrutura de destino.
Serviço de Aplicativo do Azure
Blazor WebAssembly os aplicativos podem ser implantados nos Serviços de Aplicativo do Azure no Windows, que hospedam o aplicativo no IIS.
Atualmente, não há suporte para a implantação de um aplicativo autônomo Blazor WebAssembly no Serviço de Aplicativo do Azure para Linux. Recomendamos hospedar um aplicativo autônomo Blazor WebAssembly usando os Aplicativos Web Estáticos do Azure, que dão suporte a esse cenário.
Aplicativo autônomo com o Docker
Um aplicativo autônomo Blazor WebAssembly é publicado como um conjunto de arquivos estáticos para hospedagem por um servidor de arquivos estático.
Para hospedar o aplicativo no Docker:
- Escolha um contêiner do Docker com suporte de servidor Web, como Nginx ou Apache.
- Copie os ativos da pasta
publish
para uma pasta de local definida no servidor Web para atender aos arquivos estáticos. - Aplique a configuração adicional conforme necessário para atender ao aplicativo Blazor WebAssembly.
Para obter diretrizes de configuração, confira os seguintes recursos:
Valores de configuração do host
Os aplicativos Blazor WebAssembly podem aceitar os seguintes valores de configuração do host como argumentos de linha de comando em tempo de execução no ambiente de desenvolvimento.
Raiz do conteúdo
O argumento --contentroot
define o caminho absoluto para o diretório que contém os arquivos de conteúdo do aplicativo (raiz de conteúdo). Nos exemplos a seguir, /content-root-path
é o caminho raiz do conteúdo do aplicativo.
Passe o argumento ao executar o aplicativo localmente em um prompt de comando. No diretório do aplicativo, execute:
dotnet watch --contentroot=/content-root-path
Adicione uma entrada ao arquivo
launchSettings.json
do aplicativo no perfil do IIS Express. Esta configuração é usada quando o aplicativo é executado com o Depurador do Visual Studio e em um prompt de comando comdotnet watch
(oudotnet run
)."commandLineArgs": "--contentroot=/content-root-path"
No Visual Studio, especifique o argumento em Propriedades>Depurar>Argumentos de aplicativo. A configuração do argumento na página de propriedades do Visual Studio adiciona o argumento ao arquivo
launchSettings.json
.--contentroot=/content-root-path
Caminho base
O argumento --pathbase
define o caminho base do aplicativo para um aplicativo executado localmente com um caminho de URL relativa não raiz (a marca <base>
do href
é definida como um caminho diferente de /
para preparo e produção). Nos exemplos a seguir, /relative-URL-path
é o caminho base do aplicativo. Para obter mais informações, consulte Caminho base do aplicativo ASP.NET CoreBlazor.
Importante
Ao contrário do caminho fornecido ao href
da tag <base>
, não inclua uma barra no final (/
) ao passar o valor do argumento --pathbase
. Se o caminho base do aplicativo for fornecido na tag <base>
como <base href="/CoolApp/">
(inclui uma barra à direita), passe o valor do argumento da linha de comandos como --pathbase=/CoolApp
(sem barra à direita).
Passe o argumento ao executar o aplicativo localmente em um prompt de comando. No diretório do aplicativo, execute:
dotnet watch --pathbase=/relative-URL-path
Adicione uma entrada ao arquivo
launchSettings.json
do aplicativo no perfil do IIS Express. Esta configuração é usada ao executar o aplicativo com o Depurador do Visual Studio e em um prompt de comando comdotnet watch
(oudotnet run
)."commandLineArgs": "--pathbase=/relative-URL-path"
No Visual Studio, especifique o argumento em Propriedades>Depurar>Argumentos de aplicativo. A configuração do argumento na página de propriedades do Visual Studio adiciona o argumento ao arquivo
launchSettings.json
.--pathbase=/relative-URL-path
Para obter mais informações, consulte Caminho base do aplicativo ASP.NET CoreBlazor.
URLs
O argumento --urls
define os endereços IP ou os endereços de host com portas e protocolos para atender solicitações.
Passe o argumento ao executar o aplicativo localmente em um prompt de comando. No diretório do aplicativo, execute:
dotnet watch --urls=http://127.0.0.1:0
Adicione uma entrada ao arquivo
launchSettings.json
do aplicativo no perfil do IIS Express. Esta configuração é usada ao executar o aplicativo com o Depurador do Visual Studio e em um prompt de comando comdotnet watch
(oudotnet run
)."commandLineArgs": "--urls=http://127.0.0.1:0"
No Visual Studio, especifique o argumento em Propriedades>Depurar>Argumentos de aplicativo. A configuração do argumento na página de propriedades do Visual Studio adiciona o argumento ao arquivo
launchSettings.json
.--urls=http://127.0.0.1:0
Configurar o cortador
O Blazor executa o filtro de IL (Linguagem Intermediária) em cada build de Versão para remover a IL desnecessária dos assemblies de saída. Para obter mais informações, consulte Configurar o Trimmer para ASP.NET Core Blazor.
Configurar o vinculador
O Blazor executa a vinculação de IL (linguagem intermediária) em cada build de Versão para remover a IL desnecessária dos assemblies de saída. Para obter mais informações, confira Configurar o vinculador para o ASP.NET CoreBlazor.
Alterar a extensão de nome de arquivo dos arquivos DLL
Esta seção se aplica ao .NET 5 a .NET 7. No .NET 8 ou posterior, os .NET assemblies são implantados como arquivos WebAssembly (.wasm
) usando o formato de arquivo Webcil.
Se um dispositivo de firewall, programa antivírus ou segurança de rede estiver bloqueando a transmissão dos arquivos DLL (biblioteca de vínculo dinâmico) do aplicativo (.dll
), você poderá seguir as diretrizes nesta seção para alterar as extensões de nome de arquivo dos arquivos DLL publicados do aplicativo.
Alterar as extensões de nome de arquivo dos arquivos DLL do aplicativo pode não resolver o problema, pois muitos sistemas de segurança examinam o conteúdo dos arquivos do aplicativo, não apenas verificam as extensões de arquivo.
Para obter uma abordagem mais robusta em ambientes que bloqueiam o download e a execução de arquivos DLL, siga uma das seguintes abordagens:
- Use o .NET 8 ou posterior, que empacota assemblies do .NET como arquivos do WebAssembly (
.wasm
) usando o formato de arquivo Webcil. Para obter mais informações, consulte a seção empacotamento webcil para assemblies .NET em um artigo sobre o .NET 8 ou posterior. - No .NET 6 ou posterior, use um layout de implantação personalizado.
Existem abordagens de terceiros para lidar com esse problema. Para obter mais informações, confira os recursos em Awesome Blazor.
Depois de publicar o aplicativo, use um script de shell ou um pipeline de build do DevOps para renomear os arquivos .dll
para usar uma extensão de arquivo diferente no diretório da saída publicada do aplicativo.
Nos seguintes exemplos:
- O PS (PowerShell) é usado para atualizar as extensões de arquivo.
- Os arquivos
.dll
são renomeados para usar a extensão de arquivo.bin
na linha de comando. - Os arquivos listados no manifesto de inicialização publicado Blazor com uma
.dll
extensão de arquivo são atualizados para a extensão de arquivo.bin
. - Se os ativos de trabalho de serviço também estiverem em uso, um comando do PowerShell atualizará os arquivos
.dll
listados no arquivoservice-worker-assets.js
para a extensão de arquivo.bin
.
Para usar uma extensão de arquivo diferente de .bin
, substitua .bin
nos comandos a seguir pela extensão de arquivo desejada.
Nos comandos a seguir, o {PATH}
espaço reservado é o caminho para a pasta publicada _framework
na publish
pasta.
Renomear extensões de arquivo na pasta:
dir {PATH} | rename-item -NewName { $_.name -replace ".dll\b",".bin" }
Renomear extensões de arquivo no blazor.boot.json
arquivo:
((Get-Content {PATH}\blazor.boot.json -Raw) -replace '.dll"','.bin"') | Set-Content {PATH}\blazor.boot.json
Se os recursos do service worker também estiverem em uso porque o aplicativo é um PWA (Progressive Web App - Aplicativo Web Progressivo):
((Get-Content {PATH}\service-worker-assets.js -Raw) -replace '.dll"','.bin"') | Set-Content {PATH}\service-worker-assets.js
No comando anterior, o marcador de posição {PATH}
representa o caminho para o arquivo service-worker-assets.js
publicado.
Para abordar o arquivo compactado blazor.boot.json
, adote uma das seguintes abordagens:
- Recompacte o arquivo atualizado
blazor.boot.json
, produzindo novosblazor.boot.json.gz
eblazor.boot.json.br
arquivos. (Recomendado) - Remova os arquivos compactados
blazor.boot.json.gz
eblazor.boot.json.br
. (A compactação está desabilitada com essa abordagem.)
Para o arquivo compactado de um Aplicativo Web Progressivo (PWA), adote uma das seguintes abordagens:
- Recompacte o arquivo atualizado
service-worker-assets.js
, produzindo novosservice-worker-assets.js.br
eservice-worker-assets.js.gz
arquivos. (Recomendado) - Remova os arquivos compactados
service-worker-assets.js.gz
eservice-worker-assets.js.br
. (A compactação está desabilitada com essa abordagem.)
Para automatizar a alteração da extensão no Windows no .NET 6/7, a abordagem a seguir usa um script do PowerShell colocado na raiz do projeto. O seguinte script, que desabilita a compactação, serve como base para modificações adicionais caso você queira recompactar o arquivo blazor.boot.json
e o arquivo service-worker-assets.js
se o aplicativo for um Aplicativo Web Progressivo (PWA). O caminho para a publish
pasta é passado para o script quando ele é executado.
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 os ativos do service worker também estiverem em uso porque o aplicativo é um Aplicativo Web Progressivo (PWA), adicione os seguintes comandos:
((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
No arquivo de projeto, o script é executado depois de publicar o aplicativo para a configuração Release
:
<Target Name="ChangeDLLFileExtensions" AfterTargets="AfterPublish" Condition="'$(Configuration)'=='Release'">
<Exec Command="powershell.exe -command "& {.\ChangeDLLExtensions.ps1 '$(SolutionDir)'}"" />
</Target>
Depois de publicar o aplicativo, compacte de novo manualmente blazor.boot.json
e service-worker-assets.js
, se usado, para recuperar a compactação.
Observação
Ao renomear e carregar lentamente os mesmos assemblies, confira as diretrizes em Assemblies de carregamento lento no Blazor WebAssembly do ASP.NET Core.
Normalmente, o servidor do aplicativo requer a configuração de ativo estático para atender aos arquivos com a extensão atualizada. Para um aplicativo hospedado pelo IIS, adicione uma entrada de mapa MIME (<mimeMap>
) para a nova extensão de arquivo na seção de conteúdo estático (<staticContent>
) em um arquivo web.config
personalizado. O exemplo a seguir pressupõe que a extensão de arquivo foi alterada de .dll
para .bin
:
<staticContent>
...
<mimeMap fileExtension=".bin" mimeType="application/octet-stream" />
...
</staticContent>
Inclua uma atualização para arquivos compactados, se a compactação estiver em uso:
<mimeMap fileExtension=".bin.br" mimeType="application/octet-stream" />
<mimeMap fileExtension=".bin.gz" mimeType="application/octet-stream" />
Remova a entrada para a extensão de arquivo .dll
:
- <mimeMap fileExtension=".dll" mimeType="application/octet-stream" />
Remova as entradas para arquivos .dll
compactados, se a compactação estiver em uso:
- <mimeMap fileExtension=".dll.br" mimeType="application/octet-stream" />
- <mimeMap fileExtension=".dll.gz" mimeType="application/octet-stream" />
Para obter mais informações sobre arquivos personalizados web.config
, consulte a seção Uso de um web.config
personalizado.
Corrupção antes da implantação
Normalmente na implantação:
- Somente os arquivos que foram alterados são substituídos, o que geralmente resulta em uma implantação mais rápida.
- Os arquivos existentes que não fazem parte da nova implantação são deixados no lugar para serem usados pela nova implantação.
Em casos raros, os arquivos remanescentes de uma implantação anterior podem corromper uma nova implantação. Excluir completamente a implantação existente (ou aplicativo publicado localmente antes da implantação) pode resolver o problema com uma implantação corrompida. Geralmente, excluir a implantação existente uma vez é suficiente para resolver o problema, inclusive para um pipeline de build e implantação do DevOps.
Se você determinar que a limpeza de uma implantação anterior é sempre necessária quando um pipeline de build e implantação do DevOps está em uso, você pode adicionar temporariamente uma etapa ao pipeline de build para excluir a implantação anterior para cada nova implantação, até que você solucione a causa exata do dano.