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 introducerad
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, överskrör filen på servern tyst filen på 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 ändringen
Statiska webbtillgångar var inte avsedda att åsidosättas av filer på projektets wwwroot-värd . 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.
Rekommenderad åtgärd
Som standard finns det ingen anledning för en RCL-fil att vara i konflikt med en fil på värden. RCL-filer är prefix 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 underhålla filen på värden. 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