Blazor: Uppdaterad valideringslogik för statiska webbtillgångar

Det uppstod ett problem i konfliktvalidering för statiska webbtillgångar i ASP.NET Core 3.1 och Blazor WebAssembly 3.2. Problemet:

  • Förhindrade korrekt konfliktidentifiering mellan värdtillgångarna och tillgångarna från Razor-klassbibliotek (RCL) och Blazor WebAssembly-appar.
  • Påverkar främst Blazor WebAssembly-appar, eftersom statiska webbtillgångar i RCL:er som standard hanteras under prefixet _content/$(PackageId) .

Version lanserad

5,0

Gammalt beteende

Under utvecklingen kan en RCL:s statiska webbtillgångar tyst åsidosättas med värdprojekttillgångar på samma värdsökväg. Överväg en RCL som har definierat en statisk webbtillgång som ska hanteras på /folder/file.txt. Om värden placerade en fil på wwwroot/folder/file.txt, överskred filen på servern tyst filen i RCL- eller Blazor WebAssembly-appen.

Nytt beteende

ASP.NET Core identifierar korrekt när det här problemet inträffar. Den informerar dig, användaren, om konflikten så att du kan vidta lämpliga åtgärder.

Orsak till ändring

Statiska webbtillgångar var inte avsedda att ersättas av filer i projektets wwwroot-mapp. Att tillåta åsidosättande av dessa filer kan leda till fel som är svåra att diagnostisera. Resultatet kan bli odefinierade beteendeändringar i publicerade appar.

Standardmässigt finns det ingen anledning för en RCL-fil att vara i konflikt med en fil på värddatorn. RCL-filer är prefixade med _content/${PackageId}. Blazor WebAssembly-filer placeras i roten på värd-URL-utrymmet, vilket gör konflikter enklare. Blazor WebAssembly-appar innehåller till exempel en favicon.ico fil som värden också kan inkludera i sin wwwroot-mapp .

Om konfliktens källa är en RCL-fil innebär det ofta att kod kopierar tillgångar från biblioteket till projektets wwwroot-mapp . Att skriva kod för att kopiera filer besegrar ett primärt mål för statiska webbtillgångar. Det här målet är grundläggande för att få uppdateringar i webbläsaren när innehållet uppdateras utan att behöva utlösa en ny kompilering.

Du kan välja att bevara det här beteendet och behålla filen på värddatorn. Det gör du genom att ta bort filen från listan över statiska webbtillgångar med ett anpassat MSBuild-mål.

Om du vill använda RCL-filen eller Blazor WebAssembly-appens fil i stället för värdprojektets fil tar du bort filen från värdprojektet.

Berörda API:er

Ingen