Highlights from Microsoft Build 2020

The Microsoft Build 2020 event happened this week, and, unlike all previous editions, it was a digital event only. Moreover, it was also free, so everybody could attend the 48 hours marathon. Microsoft made a lot of announcements and released various products and services for Windows, Azure, Office, Visual Studio, Edge, and more. In this post, I will summarize the things that I found the most interesting for me.

Visual Studio 2019

The version 16.6 and the first preview of 16.7 have been released. There are a bunch of new or improved functionalities across the IDE and the language compilers and tools including the following:

  • Windows Forms Designer for .NET Core
  • Microsoft Fakes for .NET Core and SDK-style projects
  • .NET Async tool for profiling .NET apps
  • Ability to generate Doxygen or XML doc comment stubs automatically in C++ by typing either /// or /** above functions
  • IntelliSense Code Linter for C++ that checks your code as you type
  • Support or partial support for more C++20 features, including span and ranges

Here is more about this:

Visual Studio Codespaces

This is the new name for Visual Studio Online. This is a service (in a preview phase) that provides cloud-based development environments that can be accessible from anywhere using Visual Studio 2019, Visual Studio Code or the built-in browser-based editor. Codespaces are environments that run either on Linux or Windows. The former are available for public preview, the latter only for private preview. It is possible to edit, build, debug and test ASP.NET Core web apps, .NET Core libraries, .NET Core console apps, and cross-platform CMake projects with Visual Studio 2019, but you need to sign-up for the private preview of Windows based codespaces. Live Share, that enables real-time collaboration in Visual Studio or Visual Studio Code, is also available to Visual Studio Codespaces.

Here is more about this:

Project Reunion

This is the codename for the Microsoft’s attempt to bridge the gap between Universal Windows Platform (UWP) applications and Win32 desktop apps. The key part of this effort is WinUI 3, a new full-fledge framework for building user-interfaces for any application running on Windows, built with any technology. WinUI 3 is the step forward from WinUI 2, which is a library of controls and styles currently available for use in any UWP app. WinUI 3 decouples the XAML, composition, and input layers of Windows 10, making them available via NuGet packages. It can be used to build applications with C++ and .NET targeting Windows 10 version 1803 and above. For Win32 applications, it can be used to either create the entire UI, or to modernize existing ones. Via XAML Islands it can be used to mix with WPF, WinForms, MFC, and ComCtl32.

C# 9

The next version of the C# language, C# 9, is expected to be released in November 2020 together with .NET 5. At build, some of the top features from this version where showcased. These include:

  • init accessor that allows a property to be initialized within an object initializer, but not assigned afterwards.
    class Person
        public string FirstName {get; init;}
        public string LastName {get; init;}
    var person = new Person 
        FirstName = "John",    // OK
        LastName = "Doe"       // OK
    person.FirstName = "Jane"; // error
  • Records, that allow defining simple classes that only contain data. These come in two forms: nominal records, and positional records. Both are introduced with the data keyword. Nominal records have the following form:
    data class Person
        public string FirstName {get; init;}
        public string LastName {get; init;}
    var person = new Person 
        FirstName = "John",
        LastName = "Doe"
    var otherPerson = person with { FirstName = "Jane" };
    var originalPerson = otherPerson with {FirstName = "John"};

    You can also declare them using a short-hard syntax, that is equivalent to the declaration above:

    data class Person { string FirstName; string LastName; }

    The positional records have similar semantics (public init only properties + deconstructor) but have a syntax that resembles named tuples.

    data class Person (string FirstName, string LastName);
  • Pattern matching with type, relational, and logical patterns
  • Target type new makes it unnecessarily to specify the type when a new object is created (provided that you use the type name and not var when declaring a variable):
    Person person = new ("John", "Doe")
  • Parameter null checking enables checking of non-nullable reference types and thows an exception if an argument is null
    public Person(string firstName!, string lastName!) { ... }
  • Covariant returns:
    class Base
       public virtual Person GetMember() { ... }
    class Derived : Base
       public override Student GetMember() { ... }

Here is more about this:

Windows Terminal

The new Windows Terminal, announced last year at Build, has been finally released. The version 1.0 can be downloaded from the Windows Store or from GitHub. The new app allows to run any command line application inside tabs and panes, create profiles for each command line application. It supports Unicode and UTF-8 characters, and is extremely customizable.

To manage panes, the following commands are available:

  • Split vertically: Alt + Shift + =
  • Split horizontally: Alt + Shift + -
  • Close pane: Ctrl + Shift + W

Here is more about this:

Windows Package Manager Client (aka winget)

The winget is a new command line interface that enables installing applications from the command prompt. As of now, winget allows to search for application, show info about them, and, of course, install them.

usage: winget [<command>] [<options>]

The following commands are available:
  install   Installs the given application
  show      Shows info about an application
  source    Manage sources of applications
  search    Find and show basic info of apps
  hash      Helper to hash installer files
  validate  Validates a manifest file

For more details on a specific command, pass it the help argument. [-?]

The following options are available:
  -v,--version  Display the version of the tool
  --info        Display general info of the tool

Here is more about this:

Linux GUI applications

After previously announcing that it will ship a full Linux kernel with Windows and that it will fully integrate Linux file access into the Windows 10 File Explorer, Microsoft announced that it will support Linux GUI applications and GPU hardware acceleration within the Linux subsystem. This new capability is primarily targeted for development scenarios concerning parallels computation or training ML and AI models. However, the release dates for these new features are not yet known.

Here is more about this:


This is a set of utilities that enable users to perform various actions, such as searching, managing windows layout, renaming files, resizing images and others in a simple way, improving productivity. Although the project was available for a while, it now brings a new functionality: PowerToys Run. This is a quick launcher, opened with ALT + Space, that enables to search and launch application, but also search for files and folders. You can do other things like simple calculation (instead of using the calculator application). Moreover, it has an extensible API so you can build plug-ins for it.

Here is more about this:

There’s more

If you want to learn more about what was presented at Build 2020, you can read the following:

Recordings of the Microsoft Build 2020 sessions are available on channel9.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.