Záznam z přednášky pro konferenci TechEd Praha 2025, kde jsem ukazoval novinky v C# 13 v .NET 9 (společně s hlavními novinkami z předchozí verze C# 12 v .NET 8 a ochutnávkou chystaných novinek v C# 14 v .net 10).
Category Archives: Development
FluentValidations vs Today [HAVIT Vzdělávací okénko, 5.6.2025]
Záznam ze Vzdělávacího miniokénka HAVIT z 5. června 2025, kde jsem ukazoval past FluentValidation validátorů, které se registrují do dependency-injection jako scoped-service a definice pravidel vznikají při volání konstruktoru (tj. v Blazor WebAssembly jednou).
WASM: AggregateException_ctor_DefaultMessage (Could not resolve type with token …)
Narazili jsme po instalaci .NET 9 SDK 9.0.204 (a nepomohl ani 9.0.300) na zajímavou chybu published Blazor WebAssembly front-endů (browser console výstup, front-end nenabíhá):
ManagedError: AggregateException_ctor_DefaultMessage (Could not resolve type with token 01000024 from typeref (expected class 'System.Reflection.Assembly' in assembly 'netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'))
at an (dotnet.runtime.5nhp1wfg9b.js:3:26894)
at Kt.resolve_or_reject (dotnet.runtime.5nhp1wfg9b.js:3:26449)
at dotnet.runtime.5nhp1wfg9b.js:3:172714
at dotnet.runtime.5nhp1wfg9b.js:3:172778
at fr (dotnet.runtime.5nhp1wfg9b.js:3:35046)
at Fc (dotnet.runtime.5nhp1wfg9b.js:3:172361)
at dotnet.native.swgexbmoy7.wasm:0x1f1a4
at dotnet.native.swgexbmoy7.wasm:0x1c8ae
at dotnet.native.swgexbmoy7.wasm:0xea19
at dotnet.native.swgexbmoy7.wasm:0x1ec88
První podezření bylo na trimming, nicméně když to zkrátím, tak se ukázalo, že se jedná o klasický problém buildů po instalaci nového SDK – je potřeba vymazat pracovní složky build-agentů, pokud každý váš build neběží na úplně čistém prostředí, ale používáte nějakou formu inkrementálního uspořádání. Když to převedu do roviny lokálního vývoje s Visual Studiem, je potřeba udělat Clean solution a vymazat složky bin a obj.
Proč to vůbec píšu? Kdyby někoho potkala stejná chyba, při troše štěstí vygooglí tento post a ušetří si čas s diagnostikou. U nás už jsme si poměrně zvykli, že když po instalaci nové verze SDK padá build, je potřeba před dalším bádáním vymazat pracovní složky build-agentů. Poprvé v historii se nám však stalo, že build úspěšně prošel (nepadal), ale výsledek build byl „vadný“ způsobem, který se projevil až při spuštění Blazor WASM front-endu v browseru.
OpenAPI + Scalar UI [Alexandr Hájek, Vzdělávací okénko, 22.5.2025]
Záznam ze Vzdělávacího (mini)okénka HAVIT z 22. května 2025. Alex ukazoval Scalar UI jako alternativu k Swagger UI.
Web Accessibility a EAA [Michal Melena, Vzdělávací okénko, 15.5.2025]
Záznam Vzdělávacího okénka HAVIT z 15. května 2025, kdy nám Michal Melena povídal o Accessibility a aktuálních povinnostech webových aplikací v této oblasti.
Seedy, UoW a Created v HAVIT stacku [Robert Haken, Vzdělávací okénko, 15.5.2025]
Technická změna v seedech, kde se nyní používá Unit of Work. Není potřeba explicitně nastavovat Created atribut, protože se o to postará systém. Taktéž je vhodné použít ExcludeUpdate, aby se Created hodnota nepřepisovala.
Tipy a triky pro mobilní vývoj na webu [Dominik Crha, Vzdělávací okénko, 10.4.2025]
Znáte v CSS funkci clamp()? To a další triky z vývoje webů pro mobilní zařízení nám ukázal Dominik. Záznam ze Vzdělávacího okénka HAVIT z 10. dubna 2025.
Blazor – past cyklu for s RenderFragment [Vzdělávací okénko, 24.4.2025]
Představení problému s cyklem for v Blazoru, kde se při použití s RenderFragment může objevit poslední hodnota řídící proměnné. Je potřeba řídící proměnnou vykopírovat do lokální proměnné nebo se jí vyhnout cyklem foreach.
Exception types – kdy který použít [Vzdělávací okénko, 10.4.2025]
NotImplementedException– výhradně během vývoje jako TODONullReferenceException– nikdy nevyhrazujeme explicitně, výhradně vyhazováno runtimemNotSupportedException– explicitně indikujeme, že o use-case víme, ale není řešenInvalidOperationException– „nemělo by v produkci nastat“, chyba vývoje (nesprávné volání ,switchnad nečekanou hodnotouenum, …)ArgumentNullException,ArgumentOutOfRangeException– výhradně přímé argumenty (nearg1.Property != null)ArgumentException– obecný problém s argumentem/-y (bližší specifikace vMessage)ContractFailedException– default proContract.Requires(cond),Contract.Assert(cond), …Exception– nedoporučuje se vyhazovat, mělo být spíšeabstract, použijte potomkyOperationFailedException– indikace chyby do UI (specficiké pro Havit.Blazor stack)ApplicationException– deprecated
Záznam ze Vzdělávacího okénka HAVIT z 10. dubna 2025.
Blazor – Proč nepoužívat parametry v OnInitialized [Vzdělávací okénko, 3.4.2025]
V tomto videu se podíváme na důležitý technický detail v Blazoru, který představil – proč by se v metodě OnInitialized popř. OnInitializedAsync neměly používat parametry. Ukážeme si na příkladu konkrétního problému, který může nastat, když komponenta nezmění instanci při změně routy a parametr zůstane se starou hodnotou. Dozvíš se:
- Jak funguje lifecycle metoda
OnInitializedv Blazoru - Proč je nevhodné používat
[Parameter]hodnoty v této fázi - Jaké chyby to může způsobit v praxi
- Kdy (a jestli vůbec) je použití parametrů v
OnInitializedv pořádku
Záznam ze Vzdělávacího okénka HAVIT z 3. dubna 2025.