Happy Monday! Here’s what we’re talking about this week:
- One big thing: Catching up on your IDEs
- The little thing: More on the Upgrade Assistant, k8s in Microsoft Learn, bUnit news
- Last week in the .NET world
One big thing: Catching up on your IDEs
There’s been a lot of news lately on the IDE front. Whether you’re using Visual Studio or JetBrains Rider, there have been some big releases that are worth reviewing. (I’m focusing on IDEs here—I realize you can do .NET in VS Code, but that’s more of an editor, even if it can sometimes feel like an IDE with the right extensions.)
As for VS, last Wednesday, Microsoft released Visual Studio 2019 v16.10 Preview 2. From the .NET perspective (C++ is not part of the .NET family, so I don’t mention those), it includes many IntelliSense updates. You’ll now see completions for casts, indexers, and operators, the ability to automatically insert method call arguments when writing method calls, a UI for working with EditorConfig files, and a new way to visualize inheritance.
The release also contains new features for working with containers: you can run services defined from your Docker Compose files, and there’s also a new containers tooling window. You’ll also see some nice improvements with the Test Explorer. You can finally view console logs there, navigate to links from log files, and automatically create log files.
Finally, Visual Studio has pushed out updates to the Git experience. With v16.10, Visual Studio’s status bar now features an enhanced branch picker, a repository picker, and a sync button. You can also select a commit to open an embedded view of its details and the file changes in the Git Repository window without having to navigate to other windows (an excellent way to compare commits). You can learn about the Git changes in a devoted blog post. With the admission I haven’t checked it out in a while, I’ve found the Git experience not to be very feature-rich. I might have to check it out again.
What about Rider? Earlier this month, JetBrains wrote about the Rider 2021.1 release. If you work in ASP.NET MVC, Web APIs, or Razor Pages, Rider now features scaffolding for Areas, Controllers, Razor Pages, Views, and Identity. It also generates boilerplate code for EF CRUD operations. Rider now supports ASP.NET Core route templates with inspections to check HTTP syntax errors and quick-fixes to fix route parameter issues.
They’ve also made some improvements to support the latest C# features: there’s increased support for patterns and records, and Rider has a new set of inspections and quick-fixes with records themselves. If you’re into tuples, Rider now allows you to use them with its refactoring tooling. They’ve even started looking at C# 10 and have taught Rider to work with the new “Constant interpolation strings” feature.
You can check out the What’s New in Rider page for all the details on their latest release.
The little things: More on the Upgrade Assistant, k8s in Microsoft Learn, bUnit news
Last week, I talked about hot reload in .NET 6. A few of you were kind enough to let me know that you were having issues seeing the GIFs. If you were having problems, I apologize (you can look at the web version of the newsletter and see them in action). I was looking into hot reload for a piece for the Telerik developer blog that was published last week. Check it out to see how you can enable it, how it works, how it handles errors and its limitations.
While I’m already doing some shameless plugs, I also wrote a piece about the .NET Upgrade Assistant. We’ve mentioned it in passing, but it’s a global command-line tool that guides you through migrating your .NET Framework apps to .NET 5. It doesn’t do everything for you, as many APIs like
System.Web isn’t available in .NET Core—but it goes a long way in doing the painful bits. It comes with an (optional) accessibility model, which allows you to customize upgrade steps without modifying the tool itself. For example, you can explicitly map NuGet packages to their replacements, add custom template files and add custom upgrade steps. To do this, you include an
When I migrated an MVC app, I thought about using it to delete the
App_Start folder and its contents automatically. It isn’t supported (but is now tracked!) as right now, you can only find files. In cases like these, though, I would hope this would be done automatically. But if you’re migrating a bunch of projects and know how you want to port over some code, you can customize it yourself. It should save you quite a bit of time.
Kubernetes has now made its way to Microsoft Learn. Microsoft shipped a new module that walks you through application and package management using Helm. You can provision Kubernetes resources from the in-browser Azure Cloud Shell.
Did you think I’d write about Kubernetes and not leave you with a funny joke?
The API proposal for C# 10 interpolated strings is now officially approved. Check it out on GitHub.
🌎 Last week in the .NET world
🔥 The Top 4
- Andrew Lock views overwritten configuration values in ASP.NET Core.
- Jeremy Likness writes about an easier way to debounce in Blazor.
- Steve Smith tests exceptions with XUnit and Actions.
- Anthony Giretti uses fluent integration tests with EF Core and xUnit.
- Microsoft releases Windows Terminal Preview 1.8 and Visual Studio 2019 v16.10 Preview 2.
- The Azure SDK team provides its April update.
📅 Community and events
- Kevin Dockx updates his Marvin.JsonPatch library.
- The Azure Cosmos DB Conf starts on Tuesday.
- JetBrains is hosting .NET Days on May 11-12.
- In community standups: ASP.NET standup talks to Shaun Walker about Oqtane, .NET Tooling talks about .NET Interactive, and Machine Learning holds office hours.
- The .NET Docs Show talks to Rehan Saeed about NuGet packages.
🌎 Web development
- Ben Foster customizes authorization responses in .NET 5.0.
- Dave Brock writes about hot reload in .NET 6.
- Matthew Jones continues writing a Tetris game in Blazor.
- Khalid Abuhakmeh generates links to ASP.NET Core map endpoints, and also adds models to ASP.NET Core.
- David Ramel writes about the new Blazor WebView controls.
- Marinko Spasojevic works with tables in MudBlazor.
- Damien Bowden secures Blazor Web Assembly using cookies and Auth0.
🥅 The .NET platform
- Nick Randolph adds behaviors to a WinUI Uno Application.
- Jonathan Allen writes about .NET 6 async improvements.
- David Ramel writes about what’s new in .NET 6 Preview 3.
- Nick Randolph restyles controls in an Uno (Windows UI) application.
- Laurent Ellerbach writes about the story of .NET nanoFramework.
- Jeff Fritz writes about C# nullability.
- Damir Arh makes code simpler with C# 9.
- Tom Deseyn writes about C# 9 new features for methods and functions.
- Dave Brock writes about the .NET Upgrade Assistant.
- Mark Downie debugs managed Linux core dumps with Visual Studio.
- Munib Butt uses NDepend in Visual Studio.
- Craig Morten starts a series on his AKS performance journey.
- Chandra Kudumula uses ML.NET to predict insurance rates.
- Pratik Nadagouda writes about using Visual Studio with Git.
- Gerard Gallant deploys C# web applications in Docker.
- Aaron Stannard builds headless Akka.NET services with IHostedService.
- Khalid Abuhakmeh writes about ReSharper & Rider improvements For Avalonia.
- Elie Bou Issa automates Azure DevOps with Logic Apps.
🏗 Design, testing, and best practices
- Grant Fritchey explains how microservices architecture changes database deployment.
- Derek Comartin organizes microservices.
- Over at Software Alchemy, scaffolding your clean DDD web app.
- Scott Hannen continues writing about his experiment with making integration tests easier to write.
- The Adventures in .NET podcast discusses the merits of CI/CD.
- The Coding After Work podcast catches up with Carl Franklin.
- The Working Code podcast discusses feature flags.
- The .NET Rocks podcast talks to Ian Cooper about TDD in 2021.
- The Changelog talks to Daniel Stenberg about managing curl..
- The Azure DevOps Podcast talks about Azure development.
- The On .NET Show secures apps with Microsoft Identity, and target-typed new expressions in C# 9.
- The ASP.NET Monsters deal with truncation with string and binary values.