Blazor: logica di convalida aggiornata per gli asset Web statici

Si verificava un problema di convalida dei conflitti per gli asset Web statici in ASP.NET Core 3.1 e Blazor WebAssembly 3.2. Problema:

  • Impediva il rilevamento corretto dei conflitti tra gli asset dell'host e gli asset delle librerie di classi Razor (RCL) e le app WebAssembly Blazor.
  • Influisce principalmente sulle app WebAssembly Blazor, poiché per impostazione predefinita, gli asset Web statici nelle librerie di classi Razor vengono gestiti con il prefisso _content/$(PackageId).

Versione introdotta

5.0

Comportamento precedente

Durante lo sviluppo, gli asset Web statici di una libreria di classi Razor potrebbero essere sovrascritti automaticamente da asset del progetto host nello stesso percorso host. Si consideri una libreria di classi Razor che ha definito un asset Web statico da gestire in /folder/file.txt. Se l'host ha inserito un file in wwwroot/folder/file.txt, il file nel server ha automaticamente sovrascritto il file nella libreria di classi Razor o nell'app WebAssembly Blazor.

Nuovo comportamento

ASP.NET Core rileva correttamente quando si verifica questo problema. Informa l'utente del conflitto per consentirgli di intraprendere l'azione appropriata.

Motivo della modifica

Gli asset Web statici non sono stati progettati per essere sovrascritti dai file nell'host wwwroot del progetto. La sovrascrittura di tali file potrebbe causare errori difficili da diagnosticare. Il risultato potrebbe essere una modifica del comportamento non definita nelle app pubblicate.

Per impostazione predefinita, non esiste alcun motivo per cui un file della libreria di classi Razor sia in conflitto con un file nell'host. I file della libreria di classi Razor hanno il prefisso _content/${PackageId}. I file WebAssembly Blazor vengono posizionati nella radice dello spazio URL dell'host per evitare i conflitti. Ad esempio, le app WebAssembly Blazor contengono un file favicon.ico che anche l'host potrebbe includere cartella wwwroot.

Se l'origine del conflitto è un file della libreria di classi Razor, spesso significa che il codice copia gli asset dalla libreria nella cartella wwwroot del progetto. La scrittura di codice per la copia di file sconfigge un obiettivo principale degli asset Web statici. Questo obiettivo è fondamentale per ottenere aggiornamenti nel browser quando il contenuto viene aggiornato senza dover attivare una nuova compilazione.

È possibile scegliere di mantenere questo comportamento e mantenere il file nell'host. A tale scopo, rimuovere il file dall'elenco di asset Web statici con una destinazione MSBuild personalizzata.

Per usare il file della libreria di classi Razor o il file dell'app WebAssembly Blazor anziché il file del progetto host, rimuovere il file dal progetto host.

API interessate

Nessuno