Microsoft Build 2020 – Highlights for .NET Developers
Over the course of the last three days, Microsoft Build 2020 released a flood of news and announcements.
For those of us who follow the .NET ecosystem, it can be difficult to wade through them all!
I’ve collected a list of announcements that I think are interesting as a .NET developer, and added short
summaries. The announcements are grouped into four categories: ASP.NET, .NET, Visual Studio and Windows.
In addition, each category is split into "released" (you can use it now!) or "preview / announced"
(you can test it out now, or soon).
A couple of days ago, Blazor WebAssembly 3.2.0 Preview 1 was released (announcement). I’m personally excited about this release
because it’s the first Blazor release that contains native support for client-side websockets!
Previously, if you wanted to use websockets, you either had to write your own wrapper, or use a larger library like
SignalR that did the wrapping for you. However, if you just wanted to use the normal System.Net.WebSockets.ClientWebSocket class that’s built into .NET, you could not.
The Mono/WASM project has actually supported ClientWebSocket for about a year (PR 12615). However, some recent changes in Blazor allowed the Blazor project to be able to consume …continue.
I was invited to speak, and I covered the new features in C# 8.0. There are a ton!
Nullable Reference Types
Indices and Ranges
Default Interface Members
Static Local Functions
Null Coallescing Assignment
I have my presentation slides and code available on GitHub.
You can see my talk on the dotnetconf page, however the audio volume is too soft to hear. Oh well! You can get
similar content by watching Mads Torgersen’s talk (Part 1) and Bill Wagner’s talk (Part 2).
If you’ve developed .NET for any length of time, chances are you’ve run into a gnarly error like this:
System.IO.FileLoadException: Could not load file or assembly ‘AcmeCorp.Foobar.Utilities, Version=1.2.0, Culture=neutral, PublicKeyToken=367d582291c765f7’ or one of its dependencies.
The located assembly’s manifest definition does not match the assembly reference.
It’s a pretty puzzling error. It means that it found version 1.2.0 of a DLL, but did not use it because a different version was requested (e.g. 1.3.0).
There are a couple of gotchas when troubleshooting these types of errors.
Ensure you don’t have any version mismatches
As a first step, ensure that all projects in your solution reference the same version of the problematic …continue.
At my work at Jetabroad I do a lot of integration with third-party webservices (like everyone these days).
The webservices, especially the test endpoints, are of variable stability and responsiveness.
The responsiveness issue can be maddening when you’re trying to iterate quickly. I prefer doing
the bulk of my development via unit tests or integration tests to isolate myself as much as possible.
However, I still ultimately find myself developing directly against these third-party services from
time to time.
I built Catchy to help solve this pain. When you start it, you provide a whitelist of domains to
intercept. Catchy will examine your outbound REST or SOAP requests to …continue.
I’m currently going through my "build a static site engine" phase that most developers pass
through at some point in their career. As part of this, I wanted to write a normal ASP.NET
Core application complete with server-side rendering, and then have the option to entirely
pre-render it to disk.
It turns out that this is quite difficult – StackOverflow and GitHub issues were a barren
wasteland of half-working answers. Most everyone assumes that you have a ControllerContext,
or at least an HttpContext! Rendering it from a command line application was unheard of!
After much experimentation, I managed to get it working! You can see a complete example in