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:
- Releasing Today! Visual Studio 2019 v16.6 & v16.7 Preview
- Visual Studio 2019 version 16.6 Release Notes
- C++ STL changelog
- IntelliSense Code Linter for C++
- Modern C++ development with Visual Studio (video)
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:
- Visual Studio Codespaces
- Expanding Visual Studio 2019 support for Visual Studio Codespaces
- Exploring Visual Studio Codespaces (video)
- Remote development with Visual Studio Codespaces (video)
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.
- Project Reunion
- WinUI
- Introducing WinUI 3 Preview 1
- About WinUI
- Developing for all 1 billion Windows 10 devices and beyond
- Get started with WinUI 3.0 for desktop apps
- Host UWP XAML controls in desktop apps (XAML Islands)
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:
- Windows Package Manager CLI (aka winget)
- Microsoft’s new Windows Package Manager is already better than the Windows Store
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:
- The Windows Subsystem for Linux BUILD 2020 Summary
- Microsoft is bringing Linux GUI apps to Windows 10
- Windows 10 is getting Linux files integration in File Explorer
PowerToys
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:
- PowerToys
- PowerToys Run
- Microsoft’s new PowerToys Run launcher for Windows 10 is now available to download
There’s more
If you want to learn more about what was presented at Build 2020, you can read the following:
- Recap of announcements from Microsoft Build 2020 key segment session
- Microsoft Build 2020 – Highlights
Recordings of the Microsoft Build 2020 sessions are available on channel9.