The clock code in most .NET apps is a static call your tests can never control.
That one fact causes more flaky time bugs than any library ever will.
DateTimeNow reads the local clock of whatever machine happens to run the code.
Deploy that same service to a server in another region and your timestamps quietly shift. Nothing throws. The data just starts lying.
Then daylight saving flips, and your "run at midnight" job fires twice or skips a day. Nobody wrote a bug. The clock moved and the code had no say in it.
Switching to UtcNow kills the region drift - one timeline for everyone.
DateTimeOffset.UtcNow goes a step further and stores the offset with the value, so you never have to guess which timezone a saved time came from.
But all three are still static calls. In a test you can't say "pretend it's 11:59 PM on the night the clock rolls back." The time is whatever the machine says right now.
That's the gap TimeProvider closes in .NET 8.
You inject it like any other dependency, then call GetUtcNow() instead of the static one.
In production it's the real system clock. In a test you hand it a FakeTimeProvider, set the exact moment you want, and even push time forward to check what happens after a delay.
The rule I follow now: no DateTimeNow near anything that makes a decision. If the logic depends on what time it is, the clock gets injected.
Make the clock a dependency, and time stops being something that happens to your code. It becomes something your tests get to decide.
Microsoft quietly published 99 ready-made .NET skills for AI Agents.
Most .NET developers have no idea they exist ๐
These are not toy examples
They are official and open-sourced.
And they work across Claude Code, Codex, GitHub Copilot, and Cursor.
Quick reminder first.
A skill is a folder of instructions that your AI loads only when a task matches.
You write the recipe once, and it follows your steps every time.
Microsoft ships these in the dotnet/skills repo: 14 plugins, around 95 skills.
A plugin is just a group of related skills.
Here are 5 worth installing today:
๐ญ. ๐ฑ๐ผ๐๐ป๐ฒ๐-๐ฑ๐ฎ๐๐ฎ
The optimizing-ef-core-queries skill finds N+1 problems, fixes tracking modes, and removes common EF Core performance traps.
๐ฎ. ๐ฑ๐ผ๐๐ป๐ฒ๐-๐๐ฒ๐๐
The largest plugin: 22 skills for running, filtering, and migrating tests between frameworks.
๐ฏ. ๐ฑ๐ผ๐๐ป๐ฒ๐-๐๐ฝ๐ด๐ฟ๐ฎ๐ฑ๐ฒ
Migrates a project from .NET 8 to 10, and turns on nullable reference types.
๐ฐ. ๐ฑ๐ผ๐๐ป๐ฒ๐-๐ฎ๐๐ฝ๐ป๐ฒ๐
Creates Web API endpoints and file-upload endpoints in Minimal APIs the right way.
๐ฑ. ๐ฑ๐ผ๐๐ป๐ฒ๐-๐ฎ๐ถ
Builds, debugs, and tests MCP servers with the C# SDK.
Installing them in Claude Code takes 4 steps:
https://t.co/j9AhJjYMUe
But here is the catch.
These skills know .NET.
But they do not know YOUR project.
They cannot tell where you put your entities, or that you don't use repositories, or that your handlers return Result<T>.
That is the gap your own skills fill.
โ Microsoft's skills โ general .NET tasks
โ Your own skills โ your house rules and conventions
Pair them, and Claude (or other AI agent) has both the framework and your style.
In my newest article, I break down the whole system:
โ What a skill is and the building blocks inside one
โ How to write the description so a skill triggers at the right moment
โ How to encode your conventions: rich entities, no repositories, full features
โ Using the Skill Creator to bundle your real code files
โ The complete Microsoft dotnet/skills setup
Read the full guide here:
๐ https://t.co/j9AhJjYMUe
Have you tried any of Microsoft's .NET skills yet, or is this the first you're hearing of them?
โโ
๐๐ฒ๐๐ ๐๐ผ๐ผ๐น๐ ๐ผ๐ณ ๐๐ต๐ฒ ๐๐ฒ๐ฒ๐ธ:
Redis Iris is a real-time context engine that transforms fragmented data into live, agent-ready context and memory. Try for free today: https://t.co/H5HavL4t5t
exe[.]dev runs persistent VMs for the agent era. SSH and root, plus HTTPS and auth out of the box. Secrets injected at the network edge stay out of the LLM's hands. Run agents, internal tools, side projects, anything: https://t.co/TMnjphLFpS
โโ
โป๏ธ Repost to help other .NET developers discover these skills
โ Follow me ( @AntonMartyniuk ) to improve your .NET and Architecture Skills
๐ New in CODE Magazine: Angular Signals: The End of RxJS Boilerplate?
Iโve been diving deeper into Angular Signals - this article is a preview of what Iโm also covering in my upcoming Signals book.
Read here ๐ https://t.co/a64XrmZO7j
#Angular#Signals#RxJS#WebDev
JSON Crack (@jsoncrack): Visualize JSON data from various formats (JSON, YAML, CSV, XML) into interactive graphs.
Easily convert JSON to YAML, XML to JSON, CSV to JSON...
A VSCode extension exists too.
https://t.co/k9N3cluZqC
I built this UI with Cursor in ~5 minutes.
I wrote the backend, and Cursor handles the integration like a joke.
I know this is trivial stuff, but do you realize how many opportunities this creates?
And to think we are still early in this game. Wild.
๐๐ผ๐ป๐ณ๐ถ๐ด๐๐ฟ๐ถ๐ป๐ด ๐๐ต๐ฒ ๐๐ ๐ ๐ถ๐ด๐ฟ๐ฎ๐๐ถ๐ผ๐ป ๐๐ถ๐๐๐ผ๐ฟ๐ ๐๐ฎ๐ฏ๐น๐ฒ
When setting up the EF DbContext, you can provide a delegate to call the MigrationHistoryTable method.
This lets you customize the migration history schema and even the table name.
Four awesome Visual Studio features
... you might not be aware of!
+ HTTP files
+ Endpoints Explorer
+ Dev Tunnels
+ Paste Json as Classes
Scroll the thread for details ...
#dotnet@VisualStudio
Multiple EF Core DbContexts in a single application?
Here's when it makes sense to do this. ๐
- Working with multiple databases
- Separating concerns
- Modular monolith
- Read replicas
I did this when implementing a modular monolith application. Each module had a dedicated schema in the database and a separate DbContext in the code.
The surprising part?
How EF Core deals with database migrations and different schemas.
Here's a breakdown of how I solved this: https://t.co/iPt3fw9vPi
---
Simplify your development process โ download your free Clean Architecture template today: https://t.co/WY1EZdIbsQ