.NET Annotated Monthly | November 2023
- .NET 8 Performance Improvements in .NET MAUI
- Performance Improvements in ASP.NET Core 8
- Announcing .NET 8 Release Candidate 2
- EF Core 8 Release Candidate 2: Smaller features in EF8
- C# Dev Kit – Now Generally Available
We’d like to thank Dennis Doomen for curating this month’s featured content! Dennis is a Microsoft MVP and Principal Consultant at Dutch consultancy firm Aviva Solutions. With 27 years of experience under his belt as a coding architect, he specializes in designing full-stack enterprise solutions based on .NET as well as providing coaching on all aspects of designing, building, documenting, deploying and maintaining software systems in an agile world. He is the author of Fluent Assertions, an assertion library with 300 million downloads, Liquid Projections, a set of libraries for building Event Sourcing projections and he has been maintaining coding guidelines for C# since 2001. You can find him on Twitter, Mastodon and BlueSky.
- I’ve been a long-time fan of the GitKraken Git GUI and like to combine that with some powerful command-line aliases, but after watching Dan Clarke’s YouTube video on Mastering Git in JetBrains Rider, I discovered that I missed out on the amazing integrated source-control capabilities of Rider.
- Newer versions of C# bring a lot of power and both Rider and ReSharper will help you get the most out of it. But what if you’re still stuck on .NET Framework 4.x where the necessary .NET types needed for those new features don’t exist? Then you add the PolySharp NuGet package to your project. It’ll add the missing types and attributes and light up your project with newer C# features.
- There seems to be a group of people that are concerned about the increasing presence of AI in our development toolchain. Well, I’m definitely not. I use a combination of GitHub CoPilot and the new JetBrains AI Assistant and it has made a world of difference. Not only did it make me a lot more productive by removing repetitive work and providing mind-blowingly smart suggestions for my code, it also helped me understand and refactor some pretty ugly legacy code. So don’t be concerned and embrace AI!
- One of the characteristics of maintainable code is that you can understand what it intends to do. Well-written en well-factored code can help with that. But what if you want to understand why that code was written, what options were considered and what the intent was? A technical decision log can help with that, but a clean source control history as well. Being able to master Git’s fixup commits and interactive rebase functionality is crucial for that, so make sure you know your tools.
- In the 15 years I’ve been practicing Test Driven Development, I’ve learned that finding the right scope for what most people refer to as the “unit” is one of the most crucial choices to make. The idea of a unit always being a class or smaller is way too dogmatic, so I tried to provide some examples to debunk that idea.
- In the past, we’ve been trained to create complicated abstractions to hide the “ugly” parts of our system such as the database. But it’s 2023 and databases should be treated as highly optimized implementation details of your architecture. As such, you want to include the interaction with the database in your automated tests. Fortunately we have Docker and open-source projects like Test Containers for .NET that allow you to spin up a Linux container with SQL Server in it, run a set of test cases and clean up after yourself. Simple and brilliant.
- You may have heard the fuss around Moq and its attempts to monetize open-source. As a long-time OSS developer, I know that it’s hard to make companies realize how much value they get from OSS. I’ve tried to capture some ideas on how to help with that, but I’ve also started to dedicate a small amount of money to a different project every month. What about you?
- Talking about contributing to the open-source community, now is the time to help influence an open-source project with 300 million downloads, Fluent Assertions. We’re working on the next major version and there are plenty of ideas to keep it ahead of competition. Go check out the roadmap here or pick-up one of the contribution-friendly issues.
Programing tutorials and tips
.NET tutorials and tips
- Code demos made easy with JetBrains Rider Live Templates – Are you nervous about that upcoming presentation? Let Poornima Nayar walk you through code demos, the easy way.
- Rider Plugin Development | Basics – Sometimes you have a specific technical scenario that other companies don’t, and it would benefit from some IDE customizations. Denys Semko shows you how to get that plugin up and running.
- The Easiest Way to Create PDFs in .NET – Everyone has to generate a PDF with C# at some point in their .NET career. And this video tutorial by Nick Chapsas demonstrates how to do just that, using QuestPDF.
- Optical Character Recognition (OCR) Made Easy with the .NET PDF Library in C# – And this article by Sowmiya Loganathan expands on creating PDFs by using OCR to do it!
- Creating Test Objects via Design Patterns – We often think about patterns in code but often less so, patterns in tests. Sarah Dutkiewicz reviews three patterns you can use to help you write better tests.
- Creating Animated Login UI in .NET MAUI with Lottie – Nice touches like an animated login are no longer nice touches, but features users have come to expect. So learn how to spice up that login with this post by Leomaris Reyes.
- CRUD Operations & EF Core Migrations with Telerik UI for .NET MAUI (Part 1) – Forms over data that include CRUD operations are the daily drivers of businesses everywhere. Rossitza Fakalieva shows us how to write code to support this core business pattern.
- Code Review & Refactoring to a Better Design – Derek Comartin has published this awesome post on code reviews and refactoring, so that you can incorporate a continuous, better, design.
- Series: Exploring the .NET 8 preview – Andrew Lock has been working on this fantastic series (12 parts and counting) on all things .NET 8. This is where to go for the latest .NET info.
- Bi-Directional gRPC Stream Cache Server in C# – This is a nice post by Cyril Canovas has a lot of good stuff in it. It takes the complex concetp of bi-directional streaming and condenses it into a readable post and code. Definitely check it out.
- Debugging cookie problems in ASP.NET Core – In the early days of the web the cookie was just a text file to track a bit of info across requests. Now, cookies are the basis of ad platforms and all sorts of advertising mayhem. So as developers we have to watch out for the issues that can arise, as blogged by Tore Nestenius.
- Simplify your .NET Docker image publishing workflow with the .NET SDK and Publish .NET Docker images using .NET SDK and GitHub Actions – Laurent Kempé has some nice articles on all things .NET and Docker. If you’re investigating any workflow or deployment enhancements and automations, you want to check out these posts.
- Blazor Basics: Blazor Event Callbacks – How does Blazor do events? Callbacks? Claudio Bernasconi explains it all here.
- .NET Task Parallel Library vs System.Threading.Channels – Is
System.Threading.Channelsbetter than .NET TPL? Charles Chen reports his findings after investigating each one.
- The convenience of System.Text.Json – Richard Lander dives deep into the
System.Text.Jsonnamespace to demonstrate performance, common usages, and where the code is convenient to use.
- Global Endpoint Filters with ASP.NET Core Minimal APIs – Our own JetBrainer Khalid Abuhakmeh has published this very handy piece on Global Endpoint Filters in ASP.NET Core Minimal APIs.
Related programming tutorials and tips:
- HTML Attributes, Properties, and Values – Rob Eisenberg goes back to basics here with this post on HTML fundamentals.
- The WORST Domain Modeling Mistakes! – Derek Comartin covers workflows, data and organizational structure, but throws in a plot twist: The problem is people.
This really does feel like 2002 all over again. 😅 Drop a comment, folks: what do you think of this code?
Interesting and cool stuff
- The Economics of Programming Languages” (Strange Loop 2023) – Evan Czaplicki, talks about the economics of doing all the jobs needed to launch a software product.
And finally, the latest from JetBrains
Here’s a chance to catch up on JetBrains news that you might have missed:
🗺️ Check out our .NET Guide! Tutorials, tips, and tricks on .NET. 📺
Blog posts, webinars, etc..:
- Recordings From JetBrains GameDev Day 2023 Are Available
- Eager, Lazy and Explicit Loading with Entity Framework Core
Sharing is caring! So share content that you find useful with other readers. Don’t keep it to yourself! Send us an email with your suggestions for publication in future newsletters!
Subscribe to Blog updates
Thanks, we've got you!
Another Look into the Future with Rider’s Predictive Debugger
In the 2023.2 release cycle, we’ve introduced the Predictive Debugger in ReSharper, which gives you predictions about code paths and variables beyond the current execution pointer. We’ve written extensively about its advantages compared to alternative debugging strategies like thorough thinking, log…
The Developer Ecosystem in 2023: Key Trends for C#
We’ve captured insights from 26,348 developers worldwide in our annual Developer Ecosystem Survey 2023. This recap focuses on C# and .NET, but you can see what’s trending in other languages as well. Enjoy the results and commentary, and let us know what you think! Top Discoveries We know t…
The ReSharper 2023.3 Release Candidate Is Now Available
Get a preview of all the latest features and improvements set to be shipped with the next major ReSharper and .NET tools releases by downloading the Release Candidate builds that have just landed. Here are the major improvements in each of the new builds: The ReSharper 2023.3 Release Can…
The Rider 2023.3 Release Candidate Is Now Available
There’s only a few days left before the next major release for Rider! Don’t feel like waiting? Get a sneak peek of Rider 2023.3 now by downloading the Release Candidate build that has just landed on our website. The Release Candidate build contains all of the notable changes that we’ve introduc…