Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Observação
Esta não é a versão mais recente deste artigo. Para a versão atual, consulte a versão .NET 10 deste artigo.
Advertência
Esta versão do ASP.NET Core não é mais suportada. Para obter mais informações, consulte a Política de suporte do .NET e .NET Core. Para a versão atual, consulte 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 para o 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 em que o aplicativo Blazor é colocado em um servidor Web de hospedagem estática ou serviço, o .NET não é usado para servir o aplicativo Blazor. Essa estratégia é abordada na seção Implantação autônoma e em outros artigos neste nó para páginas do IIS, serviços do Azure, Apache, Nginx e GitHub.
As seguintes estratégias de implantação são suportadas:
- O aplicativo Blazor é servido por um aplicativo ASP.NET Core. Essa estratégia é abordada na seção implantação hospedada com ASP.NET Core.
- O aplicativo Blazor é colocado em um servidor ou serviço Web de hospedagem estática, onde o .NET não é usado para servir o aplicativo Blazor. Essa estratégia é abordada na seção de implantação autônoma do
, que inclui informações sobre como hospedar um aplicativo como um subaplicativo do IIS. - Um aplicativo ASP.NET Core hospeda vários aplicativos Blazor WebAssembly. Para obter mais informações, consulte Vários aplicativos ASP.NET Core hospedados Blazor WebAssembly.
Hospedagem de subdomínio e subaplicativo do IIS
A hospedagem de subdomínio não requer configuração especial do aplicativo. Você não precisa configurar o caminho base da aplicação (a etiqueta <base> em wwwroot/index.html) para hospedar a aplicação em um subdomínio.
A hospedagem de subaplicações do IIS requer que seja definido o caminho base da aplicação. Para obter mais informações e hiperligações para orientações adicionais sobre o alojamento de subaplicações do IIS, consulte Host e implantar ASP.NET Core Blazor.
Reduzir o tamanho máximo do heap para alguns navegadores em dispositivos móveis
Ao criar uma aplicação Blazor que é executada no cliente (projeto.Client de uma aplicação Blazor Web App ou aplicação independente Blazor WebAssembly) e que tem como alvo navegadores de dispositivos móveis, especialmente o Safari no iOS, pode ser necessário reduzir a memória máxima para a aplicação, utilizando a propriedade MSBuild EmccMaximumHeapSize. O valor padrão é 2.147.483.648 bytes, o que pode ser muito grande e resultar na falha do aplicativo se o aplicativo tentar alocar mais memória com o navegador falhando em concedê-lo. O exemplo a seguir define o valor como 268.435.456 bytes no arquivo Program:
Ao criar um aplicativo Blazor WebAssembly direcionado a navegadores de dispositivos móveis, 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 na falha do aplicativo se o aplicativo tentar alocar mais memória com o navegador falhando em concedê-lo. O exemplo a seguir define o valor como 268.435.456 bytes no arquivo Program:
<EmccMaximumHeapSize>268435456</EmccMaximumHeapSize>
Para obter mais informações sobre as propriedades e alvos do Mono/WebAssembly MSBuild, consulte dotnet/runtime ( repositório GitHub).
Formato de empacotamento Webcil para conjuntos .NET
Webcil é um formato de empacotamento amigável para a Web para assemblies .NET projetado para permitir o uso de Blazor WebAssembly em ambientes de rede restritivos. Os arquivos Webcil utilizam um invólucro WebAssembly padrão, em que os assemblies são implantados como arquivos WebAssembly que utilizam a extensão de arquivo padrão .wasm.
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 como os recursos de inicialização são carregados
Personalize como os recursos de inicialização são carregados usando a API loadBootResource. Para obter mais informações, consulte ASP.NET Core Blazor startup.
Compressão
Quando um aplicativo 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 em tempo de execução. Os seguintes algoritmos de compressão são usados:
Blazor depende do host para servir os arquivos compactados apropriados. Ao hospedar um aplicativo autônomo Blazor WebAssembly, pode ser necessário trabalho adicional para garantir que os arquivos compactados estaticamente sejam servidos:
Blazor depende do host para servir os arquivos compactados apropriados. Ao usar um projeto do ASP.NET Core HostedBlazor WebAssembly, o projeto host é capaz de executar a negociação de conteúdo e servir os arquivos compactados estaticamente. Ao hospedar um aplicativo autônomo Blazor WebAssembly, pode ser necessário trabalho adicional para garantir que os arquivos compactados estaticamente sejam servidos:
- Para a configuração de compactação do IIS
web.config, consulte a seção IIS: Brotli e Gzip compression. - Ao hospedar em soluções de hospedagem estática que não suportam negociação de conteúdo de arquivo compactado estaticamente, considere configurar o aplicativo para buscar e decodificar arquivos compactados Brotli:
Obtenha o decodificador JavaScript Brotli do repositório google/brotli GitHub. O arquivo decodificador minificado é chamado decode.min.js e encontrado na pasta js do repositório.
Observação
Se a versão minificada do script decode.js (decode.min.js) falhar, tente usar a versão não minificada (decode.js) em vez disso.
Atualize o aplicativo para usar o decodificador.
No arquivo wwwroot/index.html, defina autostart como false na tag Blazor do <script>:
<script src="_framework/blazor.webassembly.js" autostart="false"></script>
Depois da tag Blazor de <script>e antes da tag de fechamento </body>, adicione o bloco de código JavaScript <script>. 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: independente
<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 boot, consulte ASP.NET Core Blazor startup.
Para desabilitar a compactação, adicione a propriedade CompressionEnabled MSBuild 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 BlazorEnableCompression MSBuild 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 URLs para roteamento correto
Rotear solicitações para componentes de página em um aplicativo Blazor WebAssembly não é tão simples quanto rotear solicitações em um aplicativo Blazor Server. Considere um aplicativo Blazor WebAssembly com dois componentes:
-
Main.razor: Carrega na raiz do aplicativo e contém um link para o componenteAbout(href="About"). -
About.razor:Aboutcomponente.
Quando o documento padrão do aplicativo é solicitado usando a barra de endereço do navegador (por exemplo, https://www.contoso.com/):
- O navegador faz um pedido.
- A página padrão é retornada, que geralmente é
index.html. -
index.htmlinicializa o aplicativo. - O componente Router é carregado e o componente Razor
Mainé renderizado.
Na página principal, selecionar o link para o componente About funciona no cliente porque o roteador Blazor impede que o navegador faça uma solicitação na Internet para www.contoso.com em busca de About e fornece ele próprio o componente About já renderizado. Todas as solicitações para pontos de extremidade internos no interior da aplicação Blazor WebAssembly funcionam da mesma maneira: as solicitações não iniciam requisições através do navegador para recursos hospedados em servidores na Internet. O roteador lida com as solicitações internamente.
Se uma solicitação for feita usando a barra de endereço do navegador para www.contoso.com/About, a solicitação falhará. Esse recurso não existe no host de Internet do aplicativo, portanto, uma resposta 404 - Não encontrado é retornada.
Como os navegadores fazem solicitações a hosts baseados na Internet para páginas do lado do cliente, os servidores Web e os serviços de hospedagem devem reescrever todas as solicitações de recursos que não estejam fisicamente no servidor para a página index.html. Quando index.html é retornado, o roteador Blazor do aplicativo assume o controle e responde com o recurso correto.
Ao implementar num servidor IIS, pode usar o Módulo de Reescrita de URL com o ficheiro publicado web.config da aplicação. Para obter mais informações, consulte Hospedar e implantar o ASP.NET Core Blazor WebAssembly com o IIS.
Implantação hospedada com o ASP.NET Core
Uma implementação hospedada serve a aplicação Blazor WebAssembly para navegadores a partir de uma aplicação ASP.NET Core que é executada num servidor web.
A aplicação cliente Blazor WebAssembly é publicada na pasta /bin/Release/{TARGET FRAMEWORK}/publish/wwwroot da aplicação servidor, juntamente com quaisquer outros recursos Web estáticos da aplicação servidor. Os dois aplicativos são implantados juntos. É necessário um servidor Web capaz de hospedar um aplicativo ASP.NET Core. Para uma implantação hospedada, o Visual Studio inclui o modelo Blazor WebAssembly aplicativo projeto (modeloblazorwasm 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 ASP.NET Core: hospede e implante ASP.NET Core
- Implantação no Serviço de Aplicativo do Azure: publicar um aplicativo ASP.NET Core no Azure com o Visual Studio
- Blazor modelos de projeto: estrutura de projeto do ASP.NET Core Blazor
Implantação hospedada de um executável dependente de estrutura para uma plataforma específica
Para implantar um aplicativo de Blazor WebAssembly hospedado como um executável dependente de estrutura de base para uma plataforma específica (não independente), use as seguintes instruções de acordo com as 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 Server contém a propriedade <SelfContained> MSBuild definida como false.
No arquivo de perfil de publicação .pubxml no diretório Server do projeto Properties:
<SelfContained>false</SelfContained>
Defina o Runtime Identifier (RID) usando a configuração Target Runtime na área de Configurações da interface do usuário do Publicar, que gera a propriedade <RuntimeIdentifier> MSBuild no perfil de publicação.
<RuntimeIdentifier>{RID}</RuntimeIdentifier>
Na configuração anterior, o espaço reservado {RID} é o Identificador de Tempo de Execução (RID).
Publique o projeto Server na configuração do Release.
Observação
É possível publicar uma aplicação com as configurações de perfil de publicação usando a CLI do .NET ao passar /p:PublishProfile={PROFILE} para o comando dotnet publish, onde o marcador de posição {PROFILE} é o perfil. Para obter mais informações, consulte as secções Perfis de publicação e Exemplo de publicação de pastas no artigo Perfis de publicação do Visual Studio (.pubxml) para implementação de aplicações ASP.NET Core. Se passares o RID no comando dotnet publish e não no perfil de publicação, utiliza a propriedade MSBuild (/p:RuntimeIdentifier) com o comando, e não com a opção -r|--runtime.
CLI de .NET
Configure uma implantação independente colocando a propriedade <SelfContained> MSBuild num <PropertyGroup> no arquivo de projeto do Server configurado como false:
<SelfContained>false</SelfContained>
Importante
A propriedade SelfContained deve ser colocada no ficheiro 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 Runtime Identifier (RID) usando uma das seguintes abordagens:
Opção 1: Defina o RID em um
<PropertyGroup>no arquivo de projeto do projeto Server:<RuntimeIdentifier>{RID}</RuntimeIdentifier>Na configuração anterior, o espaço reservado
{RID}é o Identificador de Tempo de Execução (RID).Publique o aplicativo na configuração Release do projeto Server:
dotnet publish -c ReleaseOpção 2: Passe o RID no comando
dotnet publishcomo propriedade do MSBuild (/p:RuntimeIdentifier), em vez de com a opção-r|--runtime:dotnet publish -c Release /p:RuntimeIdentifier={RID}No comando anterior, o local de marcação
{RID}é o Runtime Identifier (RID).
Para obter mais informações, consulte os seguintes artigos:
Implantação independente
Um standalone deployment serve o aplicativo Blazor WebAssembly como um conjunto de arquivos estáticos que são solicitados diretamente pelos clientes. Qualquer servidor de arquivos estáticos é capaz de servir o aplicativo Blazor.
Os ativos de implantação independentes são publicados no diretório /bin/Release/{TARGET FRAMEWORK}/publish/wwwroot ou bin/Release/{TARGET FRAMEWORK}/browser-wasm/publish, onde o espaço reservado {TARGET FRAMEWORK} corresponde à estrutura de destino.
Serviço de Aplicações do Azure
Blazor WebAssembly os aplicativos podem ser implantados nos Serviços de Aplicativo do Azure no Windows, que hospeda o aplicativo no IIS.
Atualmente, não há suporte para a implantação de um aplicativo Blazor WebAssembly autônomo no Serviço de Aplicativo do Azure para Linux. Recomendamos hospedar uma aplicação Blazor WebAssembly autónoma usando Azure Static Web Apps, que dá suporte a este cenário.
Autónomo com Docker
Um aplicativo Blazor WebAssembly autônomo é 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 Docker com suporte a servidor web, como Nginx ou Apache.
- Copie os ativos da pasta
publishpara uma pasta de local definida no servidor Web para servir arquivos estáticos. - Aplique a configuração adicional conforme necessário para servir o aplicativo Blazor WebAssembly.
Para obter orientações de configuração, consulte os seguintes recursos:
Valores de configuração do host
Blazor WebAssembly aplicativos podem aceitar os seguintes valores de configuração de 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-pathAdicione uma entrada no arquivo
launchSettings.jsondo aplicativo no perfil IIS Express. Essa configuração é usada quando a aplicação é executada com o depurador do Visual Studio e a partir de uma linha de comandos comdotnet watch(oudotnet run)."commandLineArgs": "--contentroot=/content-root-path"No Visual Studio, especifique o argumento em Propriedades>Depurar>argumentos do aplicativo. Definir o argumento na página de propriedades do Visual Studio adiciona o argumento ao arquivo
launchSettings.json.--contentroot=/content-root-path
Base de trajeto
O argumento --pathbase define o caminho base da aplicação para uma execução local com um caminho de URL relativo não raiz (a tag <base>href é definida para um caminho diferente de / para os ambientes de teste e produção). Nos exemplos a seguir, /relative-URL-path é a base de caminho do aplicativo. Para obter mais informações, consulte ASP.NET Core caminho base da aplicaçãoBlazor.
Importante
Ao contrário do caminho fornecido para href da tag <base>, não inclua uma barra final (/) ao passar o valor do argumento --pathbase. Se o caminho base da aplicação for fornecido na etiqueta <base> como <base href="/CoolApp/"> (inclui uma barra no final), passe o valor como argumento da linha de comando como --pathbase=/CoolApp (sem barra no final).
Passe o argumento ao executar o aplicativo localmente em um prompt de comando. No diretório do aplicativo, execute:
dotnet watch --pathbase=/relative-URL-pathAdicione uma entrada no arquivo
launchSettings.jsondo aplicativo no perfil IIS Express. Essa configuração é usada ao executar o aplicativo com o Depurador do Visual Studio e a partir de um prompt de comando comdotnet watch(oudotnet run)."commandLineArgs": "--pathbase=/relative-URL-path"No Visual Studio, especifique o argumento em Propriedades>Depurar>argumentos do aplicativo. Definir o 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 ASP.NET Core caminho base da aplicaçãoBlazor.
URLs
O argumento --urls define os endereços IP ou endereços de host com portas e protocolos para escutar 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:0Adicione uma entrada no arquivo
launchSettings.jsondo aplicativo no perfil IIS Express. Essa configuração é usada ao executar o aplicativo com o Depurador do Visual Studio e a partir de 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 do aplicativo. Definir o 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 Trimmer
Blazor executa a redução de linguagem intermediária (IL) em cada compilação Release para remover IL desnecessário dos assemblies de saída. Para obter mais informações, consulte Configurar o Trimmer para ASP.NET Core Blazor.
Configurar o vinculador
Blazor executa a vinculação de linguagem intermediária (IL) em cada compilação de versão para remover IL desnecessário dos assemblies de saída. Para obter mais informações, consulte Configurar o vinculador para ASP.NET Core Blazor.
Alterar a extensão do nome dos ficheiros DLL
Esta seção se aplica ao .NET 5 a .NET 7. No .NET 8 ou posterior, assemblies .NET são implantados como arquivos WebAssembly (.wasm) usando o formato de arquivo Webcil.
Se um firewall, programa antivírus ou dispositivo de segurança de rede estiver bloqueando a transmissão dos arquivos de biblioteca de vínculo dinâmico (DLL) do aplicativo (.dll), você poderá seguir as orientações desta 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 porque muitos sistemas de segurança verificam o conteúdo dos arquivos do aplicativo, não apenas verificam as extensões de arquivo.
Para uma abordagem mais robusta em ambientes que bloqueiam o download e a execução de arquivos DLL, adote ou das seguintes abordagens:
- Use o .NET 8 ou posterior, que empacota assemblies do .NET como ficheiros WebAssembly (
.wasm) usando o formato de ficheiro Webcil. Para obter mais informações, consulte a seção Formato de empacotamento Webcil para assemblies .NET em uma versão .NET 8 ou posterior deste artigo. - No .NET 6 ou posterior, use um layout de implantação personalizado.
Existem abordagens de terceiros para lidar com este problema. Para obter mais informações, consulte os recursos em Awesome Blazor.
Depois de publicar a aplicação, utilize um script shell ou um pipeline de compilação de DevOps para renomear os arquivos .dll, atribuindo-lhes uma extensão de ficheiro diferente na pasta do resultado publicado da aplicação.
Nos seguintes exemplos:
- O PowerShell (PS) é usado para atualizar as extensões de arquivo.
- A partir da linha de comando, os ficheiros
.dllsão renomeados para terem a extensão de ficheiro.bin. - Os arquivos listados no Blazor manifesto de inicialização publicado com a extensão de arquivo
.dllsão atualizados para a extensão de arquivo.bin. - Se os ativos do service worker também estiverem em uso, um comando do PowerShell atualizará os arquivos
.dlllistados no arquivoservice-worker-assets.jspara a extensão de arquivo.bin.
Para usar uma extensão de arquivo diferente da .bin, substitua .bin nos comandos a seguir pela extensão de arquivo desejada.
Nos comandos a seguir, o espaço reservado {PATH} é o caminho para a pasta _framework publicada na pasta publish.
Renomeie as extensões de arquivo na pasta:
dir {PATH} | rename-item -NewName { $_.name -replace ".dll\b",".bin" }
Renomeie as extensões de arquivo no ficheiro blazor.boot.json.
((Get-Content {PATH}\blazor.boot.json -Raw) -replace '.dll"','.bin"') | Set-Content {PATH}\blazor.boot.json
Se os ativos do service worker também estiverem em uso porque a aplicação é uma Aplicação Web Progressiva (PWA):
((Get-Content {PATH}\service-worker-assets.js -Raw) -replace '.dll"','.bin"') | Set-Content {PATH}\service-worker-assets.js
No comando anterior, o espaço reservado {PATH} é o caminho para o ficheiro service-worker-assets.js publicado.
Para resolver o arquivo compactado blazor.boot.json , adote uma das seguintes abordagens:
- Recompacte o arquivo atualizado
blazor.boot.json, produzindo novosblazor.boot.json.gzeblazor.boot.json.brarquivos. (Recomendado) - Remova os ficheiros
blazor.boot.json.gzeblazor.boot.json.brcomprimidos. (A compressão está desativada com esta abordagem.)
Para um ficheiro compactado do Progressive Web App (PWA), adote uma das seguintes abordagens:
- Recompacte o arquivo atualizado
service-worker-assets.js, produzindo novosservice-worker-assets.js.breservice-worker-assets.js.gzarquivos. (Recomendado) - Remova os ficheiros
service-worker-assets.js.gzeservice-worker-assets.js.brcomprimidos. (A compressão está desativada com esta abordagem.)
Para automatizar a alteração de extensão no Windows no .NET 6/7, a abordagem a seguir usa um script do PowerShell colocado na raiz do projeto. O script a seguir, que desativa a compactação, é a base para modificações adicionais caso pretenda recompactar o blazor.boot.json arquivo e o service-worker-assets.js arquivo, se a aplicação for uma PWA (Progressive Web App). 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 recursos do trabalhador de serviço também estiverem em uso porque a aplicação é uma Aplicação Web Progressiva (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 após a publicação do 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, recompacte blazor.boot.jsonmanualmente e service-worker-assets.js , se usado, reative a compactação.
Observação
Ao renomear e carregar lentamente os mesmos assemblies, consulte as orientações em Lazy load assemblies in ASP.NET Core Blazor WebAssembly.
Normalmente, o servidor do aplicativo requer configuração de ativos estáticos para servir os 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 de web.config personalizado. O exemplo a seguir pressupõe que a extensão do arquivo é alterada de .dll para .bin:
<staticContent>
...
<mimeMap fileExtension=".bin" mimeType="application/octet-stream" />
...
</staticContent>
Inclua uma atualização para os arquivos compactados se a compressão estiver a ser utilizada:
<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 entradas para arquivos compactados .dll se compressã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 arquivo personalizado web.config.
Corrupção na implantação prévia
Normalmente, na implementaçã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 local para uso pela nova implantação.
Em casos raros, arquivos persistentes de uma implantação anterior podem corromper uma nova implantação. A exclusão completa da implantação existente (ou do aplicativo publicado localmente antes da implantação) pode resolver o problema com uma implantação corrompida. Muitas vezes, excluir a implantação existente após é suficiente para resolver o problema, inclusive para um pipeline de compilação e implantação de DevOps.
Se você determinar que a limpeza de uma implantação anterior é sempre necessária quando um pipeline de compilação e implantação de DevOps estiver em uso, poderá adicionar temporariamente uma etapa ao pipeline de compilação para excluir a implantação anterior para cada nova implantação até solucionar a causa exata da corrupção.