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.
Ação recomendada
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