Blazor: lógica de validação atualizada para ativos da Web estáticos

Houve um problema na validação de conflitos dos ativos Web estáticos no ASP.NET Core 3.1 e no Blazor WebAssembly 3.2. O problema:

  • Impedia a correta detecção de conflitos entre os ativos do host e os ativos das RCLs (Bibliotecas de Classes do Razor) e aplicativos Blazor WebAssembly.
  • Afeta principalmente aplicativos Blazor WebAssembly, já que, por padrão, ativos Web estáticos em RCLs são atendidos sob o prefixo _content/$(PackageId).

Versão introduzida

5,0

Comportamento antigo

Durante o desenvolvimento, os ativos Web estáticos de uma RCL podem ser substituídos silenciosamente por ativos de projeto de host no mesmo caminho do host. Considere uma RCL que definiu um ativo Web estático a ser atendido em /folder/file.txt. Se o host colocou um arquivo em wwwroot/folder/file.txt, o arquivo no servidor substituiu silenciosamente o arquivo na RCL ou no aplicativo Blazor WebAssembly.

Novo comportamento

ASP.NET Core detecta corretamente quando esse problema acontece. Ele informa você, o usuário, sobre o conflito para que você possa tomar as medidas apropriadas.

Motivo da alteração

Os ativos Web estáticos não foram destinados a serem substituídos por arquivos no host wwwroot do projeto. Permitir a substituição desses arquivos pode levar a erros difíceis de diagnosticar. O resultado pode ser alterações de comportamento indefinidas em aplicativos publicados.

Por padrão, não há motivo para um arquivo RCL entrar em conflito com um arquivo no host. Os arquivos RCL são prefixados com _content/${PackageId}. Os arquivos Blazor WebAssembly são colocados na raiz do espaço da URL do host, o que facilita os conflitos. Por exemplo, os aplicativos Blazor WebAssembly contêm um arquivo favicon.ico que o host também pode incluir na pasta wwwroot dele.

Se a origem do conflito for um arquivo RCL, isso geralmente significa que o código está copiando ativos da biblioteca para a pasta wwwroot do projeto. Escrever código para copiar arquivos viola uma meta primária dos ativos Web estáticos. Essa meta é fundamental para obter atualizações no navegador quando o conteúdo é atualizado sem precisar disparar uma nova compilação.

Você pode optar por preservar esse comportamento e manter o arquivo no host. Para fazer isso, remova o arquivo da lista de ativos Web estáticos com destino personalizado MSBuild.

Para usar o arquivo RCL ou o arquivo do aplicativo Blazor WebAssembly em vez do arquivo do projeto host, remova o arquivo do projeto host.

APIs afetadas

Nenhum