The .NET Stacks #30: 🥂 See ya, 2020

This week, we wrap up 2020 with some news, a look back, and a coding tip.

Dave Brock
Dave Brock

Note: This is the published version of my free, weekly newsletter, The .NET Stacks. It was originally sent to subscribers on December 14, 2020. Subscribe at the bottom of this post to get the content right away!

👋 Happy Monday, everyone! This is the very last issue of 2020. Every year, I try to take the last few weeks off to decompress and unplug—considering how 2020 went, this year is no exception.

📰 News and announcements

GitHub Universe 2020 occurred this week, and Shanku Niyogi has all the details. (As .NET developers, the gap between .NET and GitHub will continue to narrow as Microsoft will pivot to GitHub Actions as its long-term CI/CD solution.)

The GitHub site itself stole the show. Dark Mode is now supported natively—you can delete your favorite browser extensions that do this for you. Also, the front page is a site to behold. Just hover over a globe to see commits in real-time from across the world:

The GitHub globe

As for actual development features, we now see the ability to auto-merge PRs, discussions, CD support. Also, companies can now invest in OSS with the GitHub Sponsors program.

What does this Sponsors news mean for the .NET OSS ecosystem? That is a complicated question. .NET PM Immo Landwerth wrote about it:

Today, we’re usually reactive when it comes to library & framework investments. By the time we know there is a need for a library we routinely research existing options but usually end up rolling our own, because nothing fits the bill as-is and we either don’t have the time or we believe we wouldn’t be able to successfully influence the design of the existing library. This results in a perception where Microsoft “sucks the air” out of the OSS ecosystem because our solutions are usually more promoted and often tightly integrated into the platform, thus rendering existing solutions less attractive. Several maintainers have cited this as a reason that they gave up or avoid building libraries that seem foundational.
To avoid this, we need to start engaging with owners of existing libraries and work with them to increase their quality … it should become a general practice. We should even consider an ongoing work item to actively investigate widely used libraries and help them raise the quality or tighten their integration into the .NET developer experience.

Check out the full discussion here:

Claire Novotny wrote two posts this week about using Source Link with Visual Studio and Visual Studio Code. Source Link has been around a few years, but is now getting the full treatment. If you aren’t familiar, it’s “a language and source-control agnostic system for providing first-class source debugging experiences for binaries.” This helps solve issues when you can’t properly debug an external library (or a .NET library).

Considering most library code is openly available from a GitHub HTTP request, debugging external dependencies is a lot easier these days. If a library has enabled Source Link, you can work with the code as you would with yours: setting breakpoints, checking values, and so on. I can see benefit personally in something like System.Text.Json or Newtonsoft.Json—it’ll be easier to pinpoint any silly serialization issues I may or may not be causing.

Claire’s first post shows off the value of using Source Link, but for this to work a library’s PDB files need to be properly indexed. Her second post shows how to add Source Link to your projects.

Speaking of Visual Studio, Jacqueline Widdis rolls out Visual Studio 2019 v16.9 Preview 2. We’re seeing a few quality-of-life improvements—using directives are automatically inserted when pasting types, and VS automatically adds semicolons when creating objects and invoking methods.

Speaking of quality-of-life, the Visual Studio team is aware of the underwhelming reception to the Git integration updates added with v16.8. They have a survey out to understand why a lot of folks are turning off the feature. They’re listening, so fill out the survey to have your voice heard.

Xin Shi discusses Infer#, which brings you interprocedural static analysis capabilities to .NET. It currently helps you detect null dereferences and resource leaks. They’re working on race condition detection and thread safety violations.

Igor Velikorossov announced what’s new in the Windows Forms runtime for .NET 5. They include a new TaskDialog control, ListView enhancements, upgrades to FileDialog, and performance and accessibility improvements.

Anthony Chu announces that .NET 5 support in Azure Functions is now in early preview. For this to happen, .NET 5 functions need to run in an out-of-process language worker separate from the Azure Functions runtime. As a result, a .NET 5 app runs differently than a 3.1 one; you build an executable that imports the .NET 5 language worker as a NuGet package. Check out the repository readme for the full details. The .NET 5 worker will be generally available in early 2021.

In other Azure news, Richard Park announced the new Azure Service Bus client libraries. Following the guidelines for new Azure SDKs, it’s a culmination of months of work and the post includes details on how its making working with core Service Bus functionality quite a bit easier.

Also, the November 2020 release of the Azure SDKs include the Service Bus updates, as well as updates for Form Recognizer, Identity, and Text Analytics.

Microsoft released a couple new Learn modules: one on building projects with GitHub, and another with an introduction to PowerShell.

Kubernetes 1.20 has been released. The release notes are very infra-heavy, but one thing to note is the Dockershim deprecation, which we talked about last week.

Okta has released a new CLI. With one okta start command, it looks like it can register you for a new account (if you don’t have one) and work with a sample ASP.NET Core MVC application.

Dev tip: nested tuple deconstruction

I’m a fan of deconstructing C# objects using tuples. Did you know you can nest them? Even though it’s been around awhile, I didn’t.

David Pine shows us how:

📆 A 2020 .NET Stacks recap

It’s been a busy 2020 at The .NET Stacks, even if we’ve only been around since the end of May. What’s happened since then? Let’s recap.

The first issue covered Microsoft Build. We talked about Project Tye and YARP. We discussed native .NET feature flags and local k8s dev in Visual Studio, EF Core, gRPC-Web and C# 9, Blazor Mobile Bindings, Azure SDKs and test automation, and how C# 9 has become more functional. Then, we discussed Project Coyote and a new Razor editor, .NET’s approachability, Newtonsoft’s new rule and using async void, and what the future of Azure DevOps looks like.

Then, we covered .NET 5 Blazor improvements, NuGet changes and many-to-many in EF Core 5, C# source generators, app trimming, Blazor CSS isolation, the fate of .NET Standard, and a Microsoft Ignite recap. We introduced route-to-code and talked about what’s happening with IdentityServer, talked about Azure Static Web Apps, got excited about .NET 5 and the .NET Foundation, and talked about how .NET 5 support works.

After that, we talked about Blazor’s production readiness, C# 9 records, and celebrated the official release of .NET 5. We gave some love to ASP.NET Core 5, talked about the future of APIs in ASP.NET Core MVC, and talked about how to switch controllers to route-to-code. And now, we’re here.

Along the way, we’ve had some wonderful interviews from community leaders. We discussed the PresenceLight project, writing about ASP.NET Core from A-Z, the Azure community, Entity Framework Core, the Microsoft docs, ML.NET, F# and functional programming (from Microsoft and the community), and Coravel. I’ve got interviews coming from LaBrina Loving, Layla Porter, Cecil Phillip, and Steve Sanderson—and welcome any suggestions for future interview subjects.

I started this newsletter as an experiment to keep my mind sharp during the pandemic, and I’m happy to see how much its grown. I hope you enjoy it, but I’m always open to feedback about how I can make it better for you. I’ll have a survey in early 2021, but if you have anything to share don’t hesitate to reach out.

See you in 2021! I hope you and your family have a safe and relaxing holiday season.

🌎 Last week in the .NET world

🔥 The Top 3

📅 Community and events

🌎 Web development

⛅ The cloud

📔 Languages

🔧 Tools

📱 Xamarin

🎤 Podcasts

🎥 Videos

Go home
.NET Stacks