Microsoft Build 2020
This was originally published 19th May 2020 on Linkedin and on 21st May 2020 LinkedIn
Day One
Empowering Every Developer - Satya Nadella
Developers will need to empower the ability to enable people to work from everywhere which the current situation has highlighted even more, and this starts by empowering developers to deliver this kind of experiences.
You can build apps anywhere that run anywhere. Microsoft are building Azure as the world's computer and giving it the flexibility needed with support for IoT and 5G. You can also build for a multi-cloud and multi-edge world. There are changes to allow developers to bring their applications to more platforms and improve support from UWP with Project Reunion and .NET Multi-platform App UI
Every Developer is Welcome - Scott Hanselman & Friends
Making remote technology work and showing off some cool developer tools, showing what can be build and how can put lots of Microsoft technologies together. There is a new Package Manager for Windows, winget, that allows you to easily install tools via Command Line. It is possible using the new Windows Subsystem for Linux to run graphical applications such as Gimp. You can also see any files that are on the Linux File system via the Windows File Explorer. You can also use Code Conversations to create code in Teams using a Bot via aka.ms/codeconversations. Windows Subsystem for Linux has near native performance and with hardware accelerated workloads via GPU in preview. You can set up your machines with Windows Package Manager with integrations for Chocolatey allowing you to customise your development machine in one script from aka.ms/winget.
Within GitHub you can have a link that enables you access to Code Spaces that allows you to spin up a container to develop on a project easily with Visual Studio Code running in the browser and develop using a project right away with nothing to install locally and everything you need within the container to work with that project, this is a simple link from a GitHub repository with one button is all you need to get started and you can sync your settings from your installed version of Visual Studio Code and you can even start a Visual Studio Live Share session from the Code Space into an installation of Visual Studio 2019.
Xamarin also allows you to develop applications for dual-screen devices such as the Surface Duo and use the TwoPaneView to dictate the panels you want to display something on and allow you to easily expand how your applications are displayed.
Azure: Invent with Purpose - Scott Guthrie & Others
Microsoft's mission is to empower people to achieve more and with their latest development tools and cloud platform innovations allow developers to deliver more solutions and developers are even more critical than before and not have to worry about the environment an application is running on with every developer welcome with Azure. There are 61 Azure data regions around the world which is more than AWS from Amazon and Google combined and is being built in a sustainable way and helping in today's time in need to enable remote work and creating new applications needed.
You can make changes to applications and get notifications from GitHub in Teams to let you know there is a Pull Request and can have links to the pull request to allow the application to be viewed in a staging environment to see the changes in place. You can build Azure Static Web Application where you can use serverless hosting for Dynamic scaling and use GitHub native workflow and unified hosting and management and can have an application available globally easily. You can build Cloud Native applications with support for many Azure Database such as Azure Cosmos DB with a free tier and serverless pricing. You can easily create Connected Apps in Visual Studio 2019 and configure the database you need and you can browser an navigate an API with HttpRepl and you can navigate endpoints in a command line style interface to make checking the API easily without needing a UI.
You can make it easy to build applications that take advantage of Azure analytics and machine learning. You can use Azure Synapse to help build predictive solutions without having to write code and can use Azure Synapse Link to connect operational databases to Azure Synapse and all the work is handled and no need to write ETL or have a performance impact on the database and currently supports Cosmos DB. You can use Azure Machine Learning Responsible ML to help understand interpreting and fairness of data while protecting the privacy of the data being used by the machine learning models.
The Journey to ONE .NET - Scott Hanselman and Scott Hunter
Blazor WebAssembly is now fully and finally supported in Visual Studio 2019 offering full-stack web development with ASP.NET Core, run .NET code natively in the browser and create progressive web applications with offline support, including features like full debugging are now supported correctly, you can also run code in the back end and debug throughout the stack and even create a Desktop application.
.NET Core 3.1 is available now with Long-Term support with the Blazor WebAssembly is now available also now supported is the Windows Forms Designer and the ML.NET Model Builder.
One .NET vision .NET 5 to 6 “wave” have a single SDK, one BCL and a unified toolchain with cross-platform native UI, cross-platform web UI with cloud native investments and continue improvements in speed, diagnostics etc. With new up-coming Maui to support cross-platform application development from Xamarin and can start with NET 3.1, then through to .NET 5 then to .NET 6 after that and all .NET versions can be installed side-by-side.
You can also run Web Applications on WSL 2.0 while debugging with cross-platform debugging from Windows to Linux and can also build applications to run in a Docker container easily. Cross-platform native applications with .NET Multi-platform App UI or Maui - runs on Windows, Max, Android and iOS and is a single project with a single codebase and can deploy to multiple devices including mobile and desktop and is an evolution of Xamarin Forms and will be targeting .NET 6 to build beautiful native UIs on any device, you can run the applications directly on Windows when debugging with no emulators and if you connect an iPhone you can deploy your application to a device without needing a Mac, however you'll still need one to publish to the App Store. You can build code for each native platform if needed with hopeful support for Linux at a future date.
.NET 5 will be launched in November 2020 at the .NET Conf 2020 event.
C# Today and Tomorrow - Mads Torgersen & Dustin Campbell
C# 9.0 ships with .NET 5, focussing on simplicity, data and immutability. You don't have to write boiler plate for a Console Application and can more easily include local functions and don't have to have a Main entry point for the application, you can still reference command line parameters with an “args” value. You can have a new set accessor “init” which can only be used during an object initialisation but cannot be set afterwards so can now build immutable objects using object initialisers.
You can make a class a record and treat this as a value and create new objects with slightly different values with a syntax like object initialiser and “with” expressions. You may also want object-based equality, so you can make them value equal but not reference equal with records marked with the “data” keyword, and for these records you don't need to have the public keyword or “init” as this will be the default and allows data types to be more easily defined as a “record”. There is also a shorthand for a constructor and deconstructor, this is done by not having any body of the “data” record defined.
Pattern matching improvements have been made including not having to have the identifier for matching on types you can do simpler patterns on values implicitly, you can have logical patterns. You can also do a target-typed “new” you can do parameter null checking and throw an argument null exception automatically and can do covariant returns you can do a more specific type when overriding methods.
Unifying and evolving the Windows App Platform - Jesse Bishop & Paul Gusmorino
Windows 10 developer opportunity is there is over a billion devices running Windows 10 with a diverse set of modern devices. Making apps great for the people who use them - support new hardware such as new sensors or input methods, modern user experience, app deployment & management, reliability security & privacy and system performance & battery life.
Starting where you are - compatibility with all your existing code such as WinForms, WPF, MFC etc and support existing packaging and deployment plus have features that work across user's versions of Windows 10. Need a better way to design and implement applications on Windows with Project Reunion - it is not a new platform but unifying and breaking down barriers between UWP and Win32 and reach all Windows 10 versions and devices people are using.
Project Reunion is Compatible, Agile, Open and Modern and can engage at aka.ms/projectreunion
Compatible - apps today directly call into the Windows OS, can make this simpler of decoupling the UWP and Desktop APIs from the OS and making them available via decoupled packages from NuGet.
Agile - how you can work with the Windows platform and reduce the lag between when you can use new features where new APIs and platform improvements can become instantly available and don't have to wait for the OS to be updated and can support newer features over older versions of Windows 10. Packages can be backed by signed framework packages to enable seamless support and can decide when you want to move to the new APIs but any bug fixes can be applied immediately for bug fixes and critical issues.
Open - can give feedback and help out with the process on GitHub which has already been used with WinUI
Modern - the latest and greatest APIs have been implemented using this approach - the Windows Runtime projections allow the latest language features to be supported, you can use the modern web platform with the WebView 2 which is based on the Microsoft Edge Chromium engine and always up to date or with a fixed version if needed. Cal also take advantage of WinUI to have modern and seamless UIs with the latest controls and capabilities. WinUI does the heavy lifting for you, there are polyfills as needed to allow support across Windows 10 operating system versions.
Day Two & Three
The next phase of .NET
The most exciting things about .NET 5 and unifying .NET Core and .NET Framework are the performance improvements and the same codebase allowing this being shared across different devices and platforms. Will allow more focus on .NET to target many projects for many platforms so allows everything to be unified into one place and consolidate work. Everything is cross platform and will continue to evolve and can have mobile applications, web applications and desktop applications to be created together and be created more quickly.
.NET MAUI will allow applications to be developed for mobile devices more easily and share more functionality between the mobile platforms, the Multi-application UI allows cross-platform applications using native controls and the performance of a native application, using a single project that will deploy to iOS, Android, Mac and Windows with the support for XAML from Xamarin.Forms and an MVU pattern where you can do your mark-up in C#.
.NET also supports .NET Tye a project to allow a YAML file to configure a project including data base configuration strings and don't have to worry about docker files and with one command you can deploy your application to AKS or Kubernetes clusters easily in the cloud, .NET Tye combines many things together and allows them to be configured and deployed together.
Blazor WebAssembly is also in general availability, this allows ASP.NET Web Applications to live in the browser and is a great option for a new project and can bring a lot of benefits of .NET and C# technologies into client-side projects, and a great opportunity to build modern applications to the web.
.NET being an open source product initially was a foreign concept but with the move to .NET Core and with future versions of the .NET platform being open-source allows the community to not only use it but contribute to it too, you can raise bugs, collaborate on the work and allow multiple people to get any issues resolved on GitHub.
.NET 5 is designed to have a much smaller container footprint will make it more appealing to people who are doing microservices and distributed systems and make it more appealing. UWP, which allows modern applications to be developed, with WinUI this will run on top of .NET 5 and won't be limited by the restrictions of the original UWP, if you want to build the best Windows app then WinUI is what you need to use and for general cross platform applications then Maui is the choice for that.
Everything you need to know about WinUI
WinUI will provide a state-of-the-art UX framework for every Windows developer. What is WinUI and what it can do? In 1992 the MFC brought C++ developers a UI Framework to develop apps for Windows 3.1 and was built around Windows Common Controls, 2002 was when WinForms was released with the .NET Framework but could only be used by .NET Developers. In 2006 WPF was released and brought new and powerful capabilities to NET developers but MFC and WinForms were still being used and supported different goals. In 2012 brought what became the Universal Windows Platform XAML framework and is the most advanced platform for creating modern applications on Windows to target many devices from Desktop, Consoles and HoloLens but only works in UWP apps and didn't support Win32 apps so there ended up being four “state-of-the-art” UI platforms.
WinUI is the Windows UI Library and is available today as WinUI which is controls and styles for UWP applications and any new apps should be using this to take advantage of the latest features. WinUI 3 is the entire codebase of UWP XAML and WinUI 2 and combined into a single UI framework shipped independently of the operating system and will support any kind of app including Win32 as well as UWP.
Project Reunion brings together Win32 and UWP with WinUI delivering latest fluent controls and styles and has native performance in any app C++ or .NET and you choose when to upgrade your application to take advantage of any updates. WinUI doesn't replace the UI frameworks of the past but offers a more contemporary option to work best on the latest devices with many different kinds of inputs supported and isn't a replacement of UWP XAML, it is basically the next version of this but is available to use for everyone.
WinUI Roadmap had the release of the alpha in February 2020, then in May 2020 the WinUI Preview 1 was released, the second preview will be released in June which will be more stable then later in 2020 the project will be fully open source including how the work will be planned and tracked, by the end of the year there will be a couple more previews with the latest being a forward-compatible and “go live” preview and can be used in production if it meets developer needs. You can find out more at aka.ms/winui and you can check out the XAML Controls Gallery App at aka.ms/xamlcontrolsgallery WinUI will initially support Windows 10 but will in the future support Windows 8.1 but if need to support Windows 7 you could use the Uno Platform.
Focus Group: Evolving the Windows App Platform
There was a focus group for members of the Windows developer community to get their questions answered, was able to talk about what had changed in the past 5-10 years was the possibilities of creating applications for Games Console and target what were devices from science fiction like HoloLens. Targeting duel-screen devices was something else worth talking about and was asked to share details of what I was working on which I mentioned my Zune Social inspired companion app for Spotify which will take advantage of the two-screens available on those devices, as well as target other Windows 10 devices as well. Many questions were answered and a lot of useful information and was very pleased to be able to not only listen into the call but to be able to participate in the conversation and was very pleased to have been able to make the session and know there was a lot of good questions asked and answered during the focus group!