From 8b101b191782951edaee73857858f64b8f55bd4e Mon Sep 17 00:00:00 2001 From: oliag Date: Mon, 2 Mar 2020 19:41:15 -0800 Subject: [PATCH 1/8] Add chapter 2 --- .../all-domains-of-dotnet5.png | Bin 0 -> 45798 bytes .../different-technologies.png | Bin 0 -> 426054 bytes .../dotnet-framework-and-dotnet-core.png | Bin 0 -> 57384 bytes .../release-history-of -dotnet.png | Bin 0 -> 34313 bytes .../whats-new-dotnet-core-desktop.md | 149 ++++++++++++++++++ 5 files changed, 149 insertions(+) create mode 100644 docs/architecture/modernize-desktop/media/whats-new-dotnet-core-desktop/all-domains-of-dotnet5.png create mode 100644 docs/architecture/modernize-desktop/media/whats-new-dotnet-core-desktop/different-technologies.png create mode 100644 docs/architecture/modernize-desktop/media/whats-new-dotnet-core-desktop/dotnet-framework-and-dotnet-core.png create mode 100644 docs/architecture/modernize-desktop/media/whats-new-dotnet-core-desktop/release-history-of -dotnet.png create mode 100644 docs/architecture/modernize-desktop/whats-new-dotnet-core-desktop.md diff --git a/docs/architecture/modernize-desktop/media/whats-new-dotnet-core-desktop/all-domains-of-dotnet5.png b/docs/architecture/modernize-desktop/media/whats-new-dotnet-core-desktop/all-domains-of-dotnet5.png new file mode 100644 index 0000000000000000000000000000000000000000..766fae6c4ee9b515a00c1cda2f03af434edeba29 GIT binary patch literal 45798 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 literal 0 HcmV?d00001 diff --git a/docs/architecture/modernize-desktop/media/whats-new-dotnet-core-desktop/different-technologies.png b/docs/architecture/modernize-desktop/media/whats-new-dotnet-core-desktop/different-technologies.png new file mode 100644 index 0000000000000000000000000000000000000000..ab3df162f7bdf73babadc31d89232a91fff0d8a6 GIT binary patch literal 426054 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

@!0*5{qqly~e+yK?I6*|X{C=}$fN)SY+U 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 ShGAdmRtYHU*W?F@%c51$CN4|@hZ`1cNb77h5 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

    211|mj02>N*bT} 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%0ARPU;8Bv9FaxA;+=1w6k+7{cGMv z#>0~C3;fpjPMY=XN~OnSdVBX^7{f=AcVIH+AsDpk50V*vk77+ zj?RDee?rXL{U(3^*kAqs<8|%ogd4W;{*#TI-}}t}(ZAKcCifNa)R}8vKK_sRzWDUP z#&aj0?ArNxOI}G_MOn#lhbuF6MgML4+v{&?^Lg&UukX*zdDCTeY3Z9{W$R6n z{zo4+*6)4)bjpFZHy!xXeukXpUajW0cD|kavfu2y{*#mZmaRE2cP|!LV8ywc^ZJ{I z6@A<8wSCDe=MA&%c#~&4_P=Z1B;8wZdFKmu;k+f$3XEwNIv#y-Szj@t! z9&X@u&!FkAmmfisg8pV?HPc; M)78&qol`;+02@~EIsgCw literal 0 HcmV?d00001 diff --git a/docs/architecture/modernize-desktop/whats-new-dotnet-core-desktop.md b/docs/architecture/modernize-desktop/whats-new-dotnet-core-desktop.md new file mode 100644 index 0000000000000..21158af75ccbc --- /dev/null +++ b/docs/architecture/modernize-desktop/whats-new-dotnet-core-desktop.md @@ -0,0 +1,149 @@ +--- +title: What's new with .NET Core 3.0 for Desktop? +description: . +ms.date: 09/16/2019 +--- + +# What's new with .NET Core 3.0 for Desktop? + +## From .NET Framework to .NET Core - The motivation behind .NET Core + +Since its inception in 2002, .NET Framework has evolved through the years to support many technologies like Windows Forms, ASP.NET, Entity Framework, Windows Store and many others. All of them are very different in nature. Therefore, Microsoft was approaching this evolution by taking parts of the .NET Framework and creating a different application stack for each technology. That way, development capabilities could be customized for the needs of the specific stack, which maximized the potential of every platform. Of course, that lead to fragmentation on the versions of the .NET Framework maintained by different independent teams. All these stacks have a common structure, containing an App Model, a Framework and a Runtime, but they differ in the implementation of each of these parts. + +![Different Microsoft technologies](./media/whats-new-dotnet-core-desktop/different-technologies.png) + +If you are targeting only one of these platforms, you can use this model. However, in many cases you might need more than one target platform in the same solution. For example, your application may have a desktop admin part, a customer-facing web site that shares the backend logic running on a server, and even a mobile client. In this case, you need a unified coding experience that can span all this .NET verticals. + +By the time Windows 8 was released, the concept of the Portable Class Libraries (PCL) was born. Originally, the .NET Framework was designed around the assumption that it is always deployed as a single unit, so [factoring](http://en.wikipedia.org/wiki/Decomposition_(computer_science)) was not a concern. To face the problem of code sharing between verticals, the driving force was on how to refactor the framework. The idea of contracts is to provide a well factored API surface area. Contracts are simply assemblies that you compile against and are design with proper factoring in mind taking care of the dependencies between them. + +This leads to a reasoning about the API differences between verticals at the assembly level, as opposed to the individual API level that we had before. This aspect enabled a class library experience that can target multiple verticals, also known as portable class libraries. + +![Release history of .NET Framework](./media/whats-new-dotnet-core-desktop/release-history-of-dotnet.png) + +With PCL, the experience of development is unified across verticals base on the API shape and the most pressing need to create libraries running on different verticals is addressed. But there is still a great challenge: APIs are only portable when the implementation is moved forward across all the verticals, and still verticals have independent implementations. + +A better approach is to unify the implementations across verticals by providing a well-factored implementation instead of a well-factored view. It is a lot simpler to ask each team owning a specific component to think about how their APIs work across all verticals than trying to retroactively provide a consistent API stack on top. This is where .NET Standard comes in, see details on next section. + +Another big challenge has to do with how the .NET Framework is deployed. The .NET Framework is a machine-wide framework. Any changes made to it affect all applications taking a dependency on it. Although this has many advantages like reducing disk space and centralized access to services, it presents some pitfalls. + +To start with, it is difficult for application developers to take a dependency on a recently released framework. You have either to take a dependency on the latest OS or provide an application installer that will install the .NET Framework along with the application. If you are a web developer, you might not even have this option as the IT department establishes the server supported version. + +Even if you are willing to go through the trouble of providing an installer in order to chain in the .NET Framework setup, you may find that upgrading the .NET Framework can break other applications. + +Despite the efforts to provide backward compatible versions of the framework, there are compatible changes that can break applications. For example, adding an interface to an existing type that can change how this type is serialized and cause breaking problems depending on the existing code. Because NET Framework installed base is huge, fighting against these breaking scenarios slows down the pace of innovations inside the .NET Framework. + +To solve all these issues Microsoft has developed .NET Core to approach the evolution of the .NET Platform. + +## Introduction to .NET Core + +The .NET Core is the evolution of Microsoft's .NET technology into a modular, cross-platform, open source, and cloud ready platform, which runs on Windows, macOS, and Linux with plans to run also on ARM based architectures like Android and IoT. + +The purpose of .NET Core is to provide a unified platform for all types of applications, which includes Windows, cross-platform and mobile applications. [.NET Standard library](../../standard/net-standard.md) enables this by providing shared base APIs, which every application model needs, and excluding any application model-specific API. + +This framework gives applications many benefits in terms of efficiency and performance, simplifying the packaging and deployment in the different supported platforms. + +The benefits of .NET Core come from these three characteristics: + +- **Cross-platform:** It allows application execution on different platforms, Windows, macOS and Linux. +- **Open source:** .NET Core platform is open source and available through GitHub, fostering transparency and community contributions. +- **Strongly supported:** Microsoft officially supports .NET Core. + +In .NET Core 3, besides existing web and cloud, there is also support for desktop, IoT and AI domains. The goal for this framework is quite impressive: to target every type of .NET development present and future. Microsoft plans to complete this vision with .NET 5 at the end of 2020. Note that the "Core" name was removed to reinforce its uniqueness in the .NET World. + +![All domains of .NET 5](./media/whats-new-dotnet-core-desktop/all-domains-of-dotnet5.png) + +## .NET Framework vs. .NET Core + +Therefore, you now understand the relevance of .NET Core inside the Microsoft strategy for .NET and might be wondering what happens with .NET Framework and asking questions like: do you have to abandon it? Is it going to disappear? What are my choices to modernize the applications I have on .NET Framework? + +The good news is Microsoft plans to support both .NET Framework and .NET Core. In fact, the announcement of .NET Core 3.0 was followed by exciting features in .NET Framework regarding modernization, so let's take a brief look at both paths. + +Listening to the .NET Framework developer's community suggestions, Microsoft have addressed three main scenarios for **.NET Core**: + +- **Side-by-side versions of .NET supporting Windows Forms and WPF** : This solves the problem of side effects when updating the machine's framework version. With .NET Core multiple versions can be installed on the same machine and for each application you can specify, which version of .NET Core you'd like it to use. Even more, now you can develop and run Windows Forms and WPF on top of .NET Core. +- **Embed .NET directly into an application** : You can now ship the .NET Core as part of your application package. This enables you to take advantage of the latest version, features, and APIs without having to wait for a specific version to be installed on the machine. +- **Take advantage of .NET Core features** : .NET Core is the fast-moving, open source version of .NET. Its side-by-side nature enables fast introduction of new innovative APIs and BCL (Base Class Libraries) improvements without the risk of breaking compatibility. Now Windows Forms and WPF applications on Windows can take advantage of the latest .NET Core features, which also includes more fundamental fixes for runtime performance, high-DPI support, and so on. + +Regarding **.NET Framework 4.8**, Microsoft has addressed three scenarios: + +- **Modern browser and media controls** : Today, .NET desktop applications use Internet Explorer and Windows Media Player for showing HTML and playing media files. Since these legacy controls don't show the latest HTML or play the latest media files, we are adding new controls that take advantage of Microsoft Edge and newer media players to support the latest standards. +- **Access to UWP Controls** : UWP contains new controls that take advantage of the latest Windows features and touch displays. You will not have to rewrite your applications to use these new features and controls. Now they are available to Windows Forms and WPF so that you can take advantage of these new features in your existing code. +- **High DPI improvements** : The resolution of displays is increasing to 4K and 8K resolutions. We want to make sure your existing Windows Forms and WPF applications can look great on these new displays. That's why we are adding improvements for HDPI + +Since .NET Framework is working on millions of machines, Microsoft will continue to support it but will not be adding new features. + +.NET Core is the open source, cross-platform, and fast-moving version of .NET. Because of its side-by-side nature, it can take changes without the fear of breaking any application. This means that .NET Core will get new APIs and language features over time that .NET Framework cannot. + +An essential part of this roadmap is to ease developers to move applications to .NET Core. .NET Core 3.0 takes a huge step by adding WPF, Windows Forms and Entity Framework 6 support, and we will keep porting APIs and features to help close the gap and make migration easier for those who chose to do so. + +So, if you have existing .NET Framework applications, you should not feel pressured to move to .NET Core. .NET Framework will be fully supported and will always be a part of Windows. However, if in the future you want to use the newest language features and APIs, you'll need to move your applications to .NET Core. + +For your brand-new desktop applications, we recommend starting directly on .NET Core. It is lightweight, runs side-by-side, high performance and cross-platform and fits perfectly on containers and microservices architectures. + +![.NET Framework and .NET Core](./media/whats-new-dotnet-core-desktop/dotnet-framework-and-dotnet-core.png) + +## .NET Standard vs. PCL + +The [.NET Standard](https://github.com/dotnet/standard) is a formal specification of .NET APIs that are intended to be available on all .NET implementations. The motivation behind the .NET Standard is establishing greater uniformity in the .NET ecosystem. .NET Standard is a specification of .NET APIs that make up a uniform set of contracts to compile your code against. These contracts are implemented in each .NET flavor, thus enabling portability across different .NET implementations. + +The .NET Standard enables the following key scenarios: + +- Defines uniform set of base class libraries APIs for all .NET implementations to implement, independent of the workload. +- Enables developers to produce portable libraries that are usable across .NET implementations, using this same set of APIs. +- Reduces or even eliminates conditional compilation of shared source due to .NET APIs, only for OS APIs. + +.NET Standard is the evolution of PCLs and here are the main differences between .NET Standard and PCLs: + +- .NET Standard is a set of curated APIs, picked by Microsoft, PCLs are not. +- The APIs that a PCL contains is dependent on the platforms that you choose to target when you create a PCL. This makes a PCL only sharable for the specific targets that you choose. +- .NET Standard is platform-agnostic, it can run anywhere, on Windows, macOS, Linux and so on. +- PCLs can also run cross-platform, but they have a more limited reach. PCLs can only target a limited set of platforms. + +## .NET Core 3.0 new Desktop features + +### Support for Windows Forms and WPF + +Windows Forms and WPF are part of .NET Core 3.0. Both presentation frameworks are only for the Windows OS and they are not cross-platform. You can think of WPF as a rich layer over DirectX and Windows Forms as a thinner layer over GDI+. WPF and Windows Forms do a great job of exposing and exercising much of the desktop application functionality in Windows. With .NET Core 3.0. Windows Forms and WPF become available for .NET Core as well as for .NET Framework. Now you can start your new desktop applications targeting .NET Core and migrate your existing ones from .NET Framework to .NET Core. + +A new version of .NET Standard, version 2.1, was released at the same time. As expected, all new .NET Standard APIs are part of .NET Core 3.0. + +You can build desktop applications with C#, F#, and VB with .NET Core 3.0. + +Also, important to notice that both Windows Forms and WPF implementations for .NET Core 3 are being open sourced. + +### XAML Islands + +XAML Islands is a set of components for developers to use the new Windows 10 controls (UWP XAML controls) in their current WPF, Windows Forms, and native Win32 apps (like MFC). You can have your "islands" of UWP XAML controls wherever you want inside your Win32 apps. + +These XAML Islands are possible because Windows 10 1903 update introduces a set of APIs that allows hosting UWP XAML content in Win32 windows using windows handlers (HWnds). Notice that only apps running on Windows 10 1903 and above can use XAML Islands. + +To facilitate to create XAML Islands for Windows Forms and WPF developers, the Windows Community Toolkit introduces a set of .NET wrappers in several NuGet packages. Those wrappers are the Wrapped Controls and Hosting Controls: + +- The WebView, WebViewCompatible, [InkCanvas](/windows/communitytoolkit/controls/wpf-winforms/inkcanvas), [MediaPlayerElement](/windows/communitytoolkit/controls/wpf-winforms/mediaplayerelement), and [MapControl](/windows/communitytoolkit/controls/wpf-winforms/mapcontrol) wrapped controls wrap some UWP XAML controls into Windows Forms or WPF controls, hiding UWP concepts for those developers. +- The WindowsXamlHost control for Windows Forms and WPF allows others not-wrapped UWP XAML controls and custom controls can be loaded into a XAML Island. + +### Access to all Windows 10 APIs + +Windows 10 has a great amount of API available for developers to work with. This APIs give access to a wide variety of functionality like Authentication, Bluetooth, Appointments, and Contacts. Now these APIs are exposed through .NET Core and give Windows developers the chance to create powerful desktops apps leveraging the capabilities present on Windows 10. + +### Side-by-side support and self-contained EXEs + +The .NET Core deployment model is one of the biggest benefits that Windows desktop developers will experience with .NET Core 3.0. The ability to globally install .NET Core provides much of the same central installation and servicing benefits of .NET Framework, while not requiring in-place updates. + +When a new .NET Core version is released, you can update each app on a machine as needed without any concern of affecting other applications. New .NET Core versions are installed in their own directories and exist "side-by-side" with each other. + +If you need to deploy with isolation, you can deploy .NET Core with your application. .NET Core will bundle your app with the .NET Core runtime as in a single executable. + +These deployment options were request by developers for quite a long time but were difficult to achieve using .NET Framework. The modular architecture used by .NET Core makes these flexible deployment options possible. + +### Performance + +Since its inception, targeting the Web and Cloud workloads, .NET Core has had performance plugged into its DNA. Server-side code must be performant enough to fulfill high concurrency scenarios and .NET Core scores today as the best performance web platform in the market. + +You can now take advantage of these performance improvements when you use it to build your next generation of desktop applications. + +## Benefits of open source + +Just a few words about .NET Core being open source. Building a cross-platform stack is something very complex that needs the interaction of specialized teams on each of the targeted platforms. This effort needs a lot of collaboration from inside and outside of Microsoft. By making it open source and thus open to public collaboration, you get the ultimate agile development style in place, raising the quality bar since issues are detected by a huge and active community of developers. + +This is a key success factor of .NET Core that will continue to speed up the roadmap mentioned above: To be the single .NET platform that any developer will ever need to build any application. From 4615a52d9e95966c00a8eb7a57477e23f37310e6 Mon Sep 17 00:00:00 2001 From: oliag Date: Fri, 6 Mar 2020 22:20:58 -0800 Subject: [PATCH 2/8] Update Acrolinx score to 85 --- .../whats-new-dotnet-core-desktop.md | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/docs/architecture/modernize-desktop/whats-new-dotnet-core-desktop.md b/docs/architecture/modernize-desktop/whats-new-dotnet-core-desktop.md index 21158af75ccbc..b88ba5f5d97ac 100644 --- a/docs/architecture/modernize-desktop/whats-new-dotnet-core-desktop.md +++ b/docs/architecture/modernize-desktop/whats-new-dotnet-core-desktop.md @@ -8,13 +8,13 @@ ms.date: 09/16/2019 ## From .NET Framework to .NET Core - The motivation behind .NET Core -Since its inception in 2002, .NET Framework has evolved through the years to support many technologies like Windows Forms, ASP.NET, Entity Framework, Windows Store and many others. All of them are very different in nature. Therefore, Microsoft was approaching this evolution by taking parts of the .NET Framework and creating a different application stack for each technology. That way, development capabilities could be customized for the needs of the specific stack, which maximized the potential of every platform. Of course, that lead to fragmentation on the versions of the .NET Framework maintained by different independent teams. All these stacks have a common structure, containing an App Model, a Framework and a Runtime, but they differ in the implementation of each of these parts. +Since its inception in 2002, .NET Framework has evolved through the years to support many technologies like Windows Forms, ASP.NET, Entity Framework, Windows Store, and many others. All of them are different in nature. Therefore, Microsoft was approaching this evolution by taking parts of the .NET Framework and creating a different application stack for each technology. That way, development capabilities could be customized for the needs of the specific stack, which maximized the potential of every platform. That lead to fragmentation on the versions of the .NET Framework maintained by different independent teams. All these stacks have a common structure, containing an App Model, a Framework, and a Runtime, but they differ in the implementation of each of these parts. ![Different Microsoft technologies](./media/whats-new-dotnet-core-desktop/different-technologies.png) If you are targeting only one of these platforms, you can use this model. However, in many cases you might need more than one target platform in the same solution. For example, your application may have a desktop admin part, a customer-facing web site that shares the backend logic running on a server, and even a mobile client. In this case, you need a unified coding experience that can span all this .NET verticals. -By the time Windows 8 was released, the concept of the Portable Class Libraries (PCL) was born. Originally, the .NET Framework was designed around the assumption that it is always deployed as a single unit, so [factoring](http://en.wikipedia.org/wiki/Decomposition_(computer_science)) was not a concern. To face the problem of code sharing between verticals, the driving force was on how to refactor the framework. The idea of contracts is to provide a well factored API surface area. Contracts are simply assemblies that you compile against and are design with proper factoring in mind taking care of the dependencies between them. +By the time Windows 8 was released, the concept of the Portable Class Libraries (PCL) was born. Originally, the .NET Framework was designed around the assumption that it is always deployed as a single unit, so [factoring](http://en.wikipedia.org/wiki/Decomposition_(computer_science)) was not a concern. To face the problem of code sharing between verticals, the driving force was on how to refactor the framework. The idea of contracts is to provide a well-factored API surface area. Contracts are simply assemblies that you compile against and are design with proper factoring in mind taking care of the dependencies between them. This leads to a reasoning about the API differences between verticals at the assembly level, as opposed to the individual API level that we had before. This aspect enabled a class library experience that can target multiple verticals, also known as portable class libraries. @@ -24,7 +24,7 @@ With PCL, the experience of development is unified across verticals base on the A better approach is to unify the implementations across verticals by providing a well-factored implementation instead of a well-factored view. It is a lot simpler to ask each team owning a specific component to think about how their APIs work across all verticals than trying to retroactively provide a consistent API stack on top. This is where .NET Standard comes in, see details on next section. -Another big challenge has to do with how the .NET Framework is deployed. The .NET Framework is a machine-wide framework. Any changes made to it affect all applications taking a dependency on it. Although this has many advantages like reducing disk space and centralized access to services, it presents some pitfalls. +Another large challenge has to do with how the .NET Framework is deployed. The .NET Framework is a machine-wide framework. Any changes made to it affect all applications taking a dependency on it. Although this has many advantages like reducing disk space and centralized access to services, it presents some pitfalls. To start with, it is difficult for application developers to take a dependency on a recently released framework. You have either to take a dependency on the latest OS or provide an application installer that will install the .NET Framework along with the application. If you are a web developer, you might not even have this option as the IT department establishes the server supported version. @@ -32,11 +32,11 @@ Even if you are willing to go through the trouble of providing an installer in o Despite the efforts to provide backward compatible versions of the framework, there are compatible changes that can break applications. For example, adding an interface to an existing type that can change how this type is serialized and cause breaking problems depending on the existing code. Because NET Framework installed base is huge, fighting against these breaking scenarios slows down the pace of innovations inside the .NET Framework. -To solve all these issues Microsoft has developed .NET Core to approach the evolution of the .NET Platform. +To solve all these issues, Microsoft has developed .NET Core to approach the evolution of the .NET Platform. ## Introduction to .NET Core -The .NET Core is the evolution of Microsoft's .NET technology into a modular, cross-platform, open source, and cloud ready platform, which runs on Windows, macOS, and Linux with plans to run also on ARM based architectures like Android and IoT. +The .NET Core is the evolution of Microsoft's .NET technology into a modular, cross-platform, open source, and cloud ready platform, which runs on Windows, macOS, and Linux with plans to run also on ARM-based architectures like Android and IoT. The purpose of .NET Core is to provide a unified platform for all types of applications, which includes Windows, cross-platform and mobile applications. [.NET Standard library](../../standard/net-standard.md) enables this by providing shared base APIs, which every application model needs, and excluding any application model-specific API. @@ -44,11 +44,11 @@ This framework gives applications many benefits in terms of efficiency and perfo The benefits of .NET Core come from these three characteristics: -- **Cross-platform:** It allows application execution on different platforms, Windows, macOS and Linux. +- **Cross-platform:** It allows application execution on different platforms, Windows, macOS, and Linux. - **Open source:** .NET Core platform is open source and available through GitHub, fostering transparency and community contributions. -- **Strongly supported:** Microsoft officially supports .NET Core. +- **Supported:** Microsoft officially supports .NET Core. -In .NET Core 3, besides existing web and cloud, there is also support for desktop, IoT and AI domains. The goal for this framework is quite impressive: to target every type of .NET development present and future. Microsoft plans to complete this vision with .NET 5 at the end of 2020. Note that the "Core" name was removed to reinforce its uniqueness in the .NET World. +In .NET Core 3, besides existing web and cloud, there is also support for desktop, IoT, and AI domains. The goal for this framework is impressive: to target every type of .NET development present and future. Microsoft plans to complete this vision with .NET 5 at the end of 2020. The "Core" name was removed to reinforce its uniqueness in the .NET World. ![All domains of .NET 5](./media/whats-new-dotnet-core-desktop/all-domains-of-dotnet5.png) @@ -60,21 +60,21 @@ The good news is Microsoft plans to support both .NET Framework and .NET Core. I Listening to the .NET Framework developer's community suggestions, Microsoft have addressed three main scenarios for **.NET Core**: -- **Side-by-side versions of .NET supporting Windows Forms and WPF** : This solves the problem of side effects when updating the machine's framework version. With .NET Core multiple versions can be installed on the same machine and for each application you can specify, which version of .NET Core you'd like it to use. Even more, now you can develop and run Windows Forms and WPF on top of .NET Core. -- **Embed .NET directly into an application** : You can now ship the .NET Core as part of your application package. This enables you to take advantage of the latest version, features, and APIs without having to wait for a specific version to be installed on the machine. -- **Take advantage of .NET Core features** : .NET Core is the fast-moving, open source version of .NET. Its side-by-side nature enables fast introduction of new innovative APIs and BCL (Base Class Libraries) improvements without the risk of breaking compatibility. Now Windows Forms and WPF applications on Windows can take advantage of the latest .NET Core features, which also includes more fundamental fixes for runtime performance, high-DPI support, and so on. +- **Side-by-side versions of .NET supporting Windows Forms and WPF: This solves the problem of side effects when updating the machine's framework version. With .NET Core multiple versions can be installed on the same machine and for each application you can specify, which version of .NET Core you'd like it to use. Even more, now you can develop and run Windows Forms and WPF on top of .NET Core. +- **Embed .NET directly into an application: You can now ship the .NET Core as part of your application package. This enables you to take advantage of the latest version, features, and APIs without having to wait for a specific version to be installed on the machine. +- **Take advantage of .NET Core features: .NET Core is the fast-moving, open-source version of .NET. Its side-by-side nature enables fast introduction of new innovative APIs and BCL (Base Class Libraries) improvements without the risk of breaking compatibility. Now Windows Forms and WPF applications on Windows can take advantage of the latest .NET Core features, which also includes more fundamental fixes for runtime performance, high-DPI support, and so on. Regarding **.NET Framework 4.8**, Microsoft has addressed three scenarios: -- **Modern browser and media controls** : Today, .NET desktop applications use Internet Explorer and Windows Media Player for showing HTML and playing media files. Since these legacy controls don't show the latest HTML or play the latest media files, we are adding new controls that take advantage of Microsoft Edge and newer media players to support the latest standards. -- **Access to UWP Controls** : UWP contains new controls that take advantage of the latest Windows features and touch displays. You will not have to rewrite your applications to use these new features and controls. Now they are available to Windows Forms and WPF so that you can take advantage of these new features in your existing code. -- **High DPI improvements** : The resolution of displays is increasing to 4K and 8K resolutions. We want to make sure your existing Windows Forms and WPF applications can look great on these new displays. That's why we are adding improvements for HDPI +- **Modern browser and media controls: Today, .NET desktop applications use Internet Explorer and Windows Media Player for showing HTML and playing media files. Since these legacy controls don't show the latest HTML or play the latest media files, we are adding new controls that take advantage of Microsoft Edge and newer media players to support the latest standards. +- **Access to UWP Controls: UWP contains new controls that take advantage of the latest Windows features and touch displays. You will not have to rewrite your applications to use these new features and controls. Now they are available to Windows Forms and WPF so that you can take advantage of these new features in your existing code. +- **High DPI improvements: The resolution of displays is increasing to 4K and 8K resolutions. We want to make sure your existing Windows Forms and WPF applications can look great on these new displays. That's why we are adding improvements for HDPI Since .NET Framework is working on millions of machines, Microsoft will continue to support it but will not be adding new features. .NET Core is the open source, cross-platform, and fast-moving version of .NET. Because of its side-by-side nature, it can take changes without the fear of breaking any application. This means that .NET Core will get new APIs and language features over time that .NET Framework cannot. -An essential part of this roadmap is to ease developers to move applications to .NET Core. .NET Core 3.0 takes a huge step by adding WPF, Windows Forms and Entity Framework 6 support, and we will keep porting APIs and features to help close the gap and make migration easier for those who chose to do so. +An essential part of the roadmap is to ease developers to move applications to .NET Core. .NET Core 3.0 takes a huge step by adding WPF, Windows Forms and Entity Framework 6 support, and we will keep porting APIs and features to help close the gap and make migration easier for those who chose to do so. So, if you have existing .NET Framework applications, you should not feel pressured to move to .NET Core. .NET Framework will be fully supported and will always be a part of Windows. However, if in the future you want to use the newest language features and APIs, you'll need to move your applications to .NET Core. @@ -92,11 +92,11 @@ The .NET Standard enables the following key scenarios: - Enables developers to produce portable libraries that are usable across .NET implementations, using this same set of APIs. - Reduces or even eliminates conditional compilation of shared source due to .NET APIs, only for OS APIs. -.NET Standard is the evolution of PCLs and here are the main differences between .NET Standard and PCLs: +.NET Standard is the evolution of PCLs and here are the fundamental differences between .NET Standard and PCLs: - .NET Standard is a set of curated APIs, picked by Microsoft, PCLs are not. -- The APIs that a PCL contains is dependent on the platforms that you choose to target when you create a PCL. This makes a PCL only sharable for the specific targets that you choose. -- .NET Standard is platform-agnostic, it can run anywhere, on Windows, macOS, Linux and so on. +- The APIs that a PCL contains are dependent on the platforms that you choose to target when you create a PCL. This makes a PCL only sharable for the specific targets that you choose. +- .NET Standard is platform-agnostic, it can run anywhere, on Windows, macOS, Linux, and so on. - PCLs can also run cross-platform, but they have a more limited reach. PCLs can only target a limited set of platforms. ## .NET Core 3.0 new Desktop features @@ -109,7 +109,7 @@ A new version of .NET Standard, version 2.1, was released at the same time. As e You can build desktop applications with C#, F#, and VB with .NET Core 3.0. -Also, important to notice that both Windows Forms and WPF implementations for .NET Core 3 are being open sourced. +Also, important to notice that both Windows Forms and WPF implementations for .NET Core 3 are being open-sourced. ### XAML Islands @@ -124,7 +124,7 @@ To facilitate to create XAML Islands for Windows Forms and WPF developers, the W ### Access to all Windows 10 APIs -Windows 10 has a great amount of API available for developers to work with. This APIs give access to a wide variety of functionality like Authentication, Bluetooth, Appointments, and Contacts. Now these APIs are exposed through .NET Core and give Windows developers the chance to create powerful desktops apps leveraging the capabilities present on Windows 10. +Windows 10 has a great amount of API available for developers to work with. These APIs give access to a wide variety of functionality like Authentication, Bluetooth, Appointments, and Contacts. Now these APIs are exposed through .NET Core and give Windows developers the chance to create powerful desktops apps leveraging the capabilities present on Windows 10. ### Side-by-side support and self-contained EXEs @@ -134,7 +134,7 @@ When a new .NET Core version is released, you can update each app on a machine a If you need to deploy with isolation, you can deploy .NET Core with your application. .NET Core will bundle your app with the .NET Core runtime as in a single executable. -These deployment options were request by developers for quite a long time but were difficult to achieve using .NET Framework. The modular architecture used by .NET Core makes these flexible deployment options possible. +These deployment options were requested by developers for quite a long time but were difficult to achieve using .NET Framework. The modular architecture used by .NET Core makes these flexible deployment options possible. ### Performance @@ -142,8 +142,8 @@ Since its inception, targeting the Web and Cloud workloads, .NET Core has had pe You can now take advantage of these performance improvements when you use it to build your next generation of desktop applications. -## Benefits of open source +## Benefits of open-source -Just a few words about .NET Core being open source. Building a cross-platform stack is something very complex that needs the interaction of specialized teams on each of the targeted platforms. This effort needs a lot of collaboration from inside and outside of Microsoft. By making it open source and thus open to public collaboration, you get the ultimate agile development style in place, raising the quality bar since issues are detected by a huge and active community of developers. +Just a few words about .NET Core being open source. Building a cross-platform stack is something complex that needs the interaction of specialized teams on each of the targeted platforms. This effort needs much collaboration from inside and outside of Microsoft. By making it open source and thus open to public collaboration, you get the ultimate agile development style in place, raising the quality bar since issues are detected by a huge and active community of developers. This is a key success factor of .NET Core that will continue to speed up the roadmap mentioned above: To be the single .NET platform that any developer will ever need to build any application. From 9a2ff5f54b2abe7d73815a61e208bd4760f86887 Mon Sep 17 00:00:00 2001 From: Olia Gavrysh <31997351+OliaG@users.noreply.github.com> Date: Thu, 26 Mar 2020 15:58:59 -0700 Subject: [PATCH 3/8] Apply suggestions from code review Co-Authored-By: Maira Wenzel --- .../whats-new-dotnet-core-desktop.md | 78 +++++++++---------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/docs/architecture/modernize-desktop/whats-new-dotnet-core-desktop.md b/docs/architecture/modernize-desktop/whats-new-dotnet-core-desktop.md index b88ba5f5d97ac..28190e816ecf7 100644 --- a/docs/architecture/modernize-desktop/whats-new-dotnet-core-desktop.md +++ b/docs/architecture/modernize-desktop/whats-new-dotnet-core-desktop.md @@ -12,73 +12,73 @@ Since its inception in 2002, .NET Framework has evolved through the years to sup ![Different Microsoft technologies](./media/whats-new-dotnet-core-desktop/different-technologies.png) -If you are targeting only one of these platforms, you can use this model. However, in many cases you might need more than one target platform in the same solution. For example, your application may have a desktop admin part, a customer-facing web site that shares the backend logic running on a server, and even a mobile client. In this case, you need a unified coding experience that can span all this .NET verticals. +If you're targeting only one of these platforms, you can use this model. However, in many cases you might need more than one target platform in the same solution. For example, your application may have a desktop admin part, a customer-facing web site that shares the back-end logic running on a server, and even a mobile client. In this case, you need a unified coding experience that can span all this .NET verticals. -By the time Windows 8 was released, the concept of the Portable Class Libraries (PCL) was born. Originally, the .NET Framework was designed around the assumption that it is always deployed as a single unit, so [factoring](http://en.wikipedia.org/wiki/Decomposition_(computer_science)) was not a concern. To face the problem of code sharing between verticals, the driving force was on how to refactor the framework. The idea of contracts is to provide a well-factored API surface area. Contracts are simply assemblies that you compile against and are design with proper factoring in mind taking care of the dependencies between them. +By the time Windows 8 was released, the concept of the Portable Class Libraries (PCL) was born. Originally, the .NET Framework was designed around the assumption that it would always be deployed as a single unit, so [factoring](http://en.wikipedia.org/wiki/Decomposition_(computer_science)) wasn't a concern. To face the problem of code sharing between verticals, the driving force was on how to refactor the framework. The idea of contracts is to provide a well-factored API surface area. Contracts are simply assemblies that you compile against and are designed with proper factoring in mind taking care of the dependencies between them. -This leads to a reasoning about the API differences between verticals at the assembly level, as opposed to the individual API level that we had before. This aspect enabled a class library experience that can target multiple verticals, also known as portable class libraries. +This leads to reasoning about the API differences between verticals at the assembly level, as opposed to the individual API level that we had before. This aspect enabled a class library experience that can target multiple verticals, also known as portable class libraries. -![Release history of .NET Framework](./media/whats-new-dotnet-core-desktop/release-history-of-dotnet.png) +![Release history of .NET Framework](./media/whats-new-dotnet-core-desktop/release-history.png) -With PCL, the experience of development is unified across verticals base on the API shape and the most pressing need to create libraries running on different verticals is addressed. But there is still a great challenge: APIs are only portable when the implementation is moved forward across all the verticals, and still verticals have independent implementations. +With PCL, the experience of development is unified across verticals based on the API shape. And the most pressing need to create libraries running on different verticals is also addressed. But there's still a great challenge: APIs are only portable when the implementation is moved forward across all the verticals, and still verticals have independent implementations. -A better approach is to unify the implementations across verticals by providing a well-factored implementation instead of a well-factored view. It is a lot simpler to ask each team owning a specific component to think about how their APIs work across all verticals than trying to retroactively provide a consistent API stack on top. This is where .NET Standard comes in, see details on next section. +A better approach is to unify the implementations across verticals by providing a well-factored implementation instead of a well-factored view. It's a lot simpler to ask each team that owns a specific component to think about how their APIs work across all verticals than trying to retroactively provide a consistent API stack on top. This is where .NET Standard comes in. See details on the next section. -Another large challenge has to do with how the .NET Framework is deployed. The .NET Framework is a machine-wide framework. Any changes made to it affect all applications taking a dependency on it. Although this has many advantages like reducing disk space and centralized access to services, it presents some pitfalls. +Another large challenge has to do with how the .NET Framework is deployed. The .NET Framework is a machine-wide framework. Any changes made to it affect all applications taking a dependency on it. Although this deployment model has many advantages, such as reducing disk space and centralized access to services, it presents some pitfalls. -To start with, it is difficult for application developers to take a dependency on a recently released framework. You have either to take a dependency on the latest OS or provide an application installer that will install the .NET Framework along with the application. If you are a web developer, you might not even have this option as the IT department establishes the server supported version. +To start with, it's difficult for application developers to take a dependency on a recently released framework. They either have to take a dependency on the latest OS or provide an application installer that installs the .NET Framework along with the application. If you are a web developer, you might not even have this option as the IT department establishes the server supported version. -Even if you are willing to go through the trouble of providing an installer in order to chain in the .NET Framework setup, you may find that upgrading the .NET Framework can break other applications. +Even if you're willing to go through the trouble of providing an installer to chain in the .NET Framework setup, you may find that upgrading the .NET Framework can break other applications. -Despite the efforts to provide backward compatible versions of the framework, there are compatible changes that can break applications. For example, adding an interface to an existing type that can change how this type is serialized and cause breaking problems depending on the existing code. Because NET Framework installed base is huge, fighting against these breaking scenarios slows down the pace of innovations inside the .NET Framework. +Despite the efforts to provide backward compatible versions of the framework, there are compatible changes that can break applications. For example, adding an interface to an existing type can change how this type is serialized and cause breaking problems depending on the existing code. Because the NET Framework installed base is huge, fighting against these breaking scenarios slows down the pace of innovations inside the .NET Framework. To solve all these issues, Microsoft has developed .NET Core to approach the evolution of the .NET Platform. ## Introduction to .NET Core -The .NET Core is the evolution of Microsoft's .NET technology into a modular, cross-platform, open source, and cloud ready platform, which runs on Windows, macOS, and Linux with plans to run also on ARM-based architectures like Android and IoT. +The .NET Core is the evolution of Microsoft's .NET technology into a modular, cross-platform, open source, and cloud-ready platform. It runs on Windows, macOS, and Linux with plans to also run on ARM-based architectures like Android and IoT. -The purpose of .NET Core is to provide a unified platform for all types of applications, which includes Windows, cross-platform and mobile applications. [.NET Standard library](../../standard/net-standard.md) enables this by providing shared base APIs, which every application model needs, and excluding any application model-specific API. +The purpose of .NET Core is to provide a unified platform for all types of applications, which includes Windows, cross-platform, and mobile applications. [.NET Standard](../../standard/net-standard.md) enables this by providing shared base APIs, which every application model needs, and excluding any application model-specific API. This framework gives applications many benefits in terms of efficiency and performance, simplifying the packaging and deployment in the different supported platforms. The benefits of .NET Core come from these three characteristics: -- **Cross-platform:** It allows application execution on different platforms, Windows, macOS, and Linux. +- **Cross-platform:** It allows application execution on different platforms (Windows, macOS, and Linux). - **Open source:** .NET Core platform is open source and available through GitHub, fostering transparency and community contributions. - **Supported:** Microsoft officially supports .NET Core. -In .NET Core 3, besides existing web and cloud, there is also support for desktop, IoT, and AI domains. The goal for this framework is impressive: to target every type of .NET development present and future. Microsoft plans to complete this vision with .NET 5 at the end of 2020. The "Core" name was removed to reinforce its uniqueness in the .NET World. +In .NET Core 3.0, besides the existing support for web and cloud, there's also support for desktop, IoT, and AI domains. The goal for this framework is impressive: to target every type of .NET development present and future. Microsoft plans to complete this vision with .NET 5 at the end of 2020. The "Core" name was removed to reinforce its uniqueness in the .NET world. ![All domains of .NET 5](./media/whats-new-dotnet-core-desktop/all-domains-of-dotnet5.png) ## .NET Framework vs. .NET Core -Therefore, you now understand the relevance of .NET Core inside the Microsoft strategy for .NET and might be wondering what happens with .NET Framework and asking questions like: do you have to abandon it? Is it going to disappear? What are my choices to modernize the applications I have on .NET Framework? +So now that you understand the relevance of .NET Core inside the Microsoft strategy for .NET, you might be wondering what happens with .NET Framework. You could be asking questions like: do you have to abandon it? Is it going to disappear? What are my choices to modernize the applications I have on .NET Framework? -The good news is Microsoft plans to support both .NET Framework and .NET Core. In fact, the announcement of .NET Core 3.0 was followed by exciting features in .NET Framework regarding modernization, so let's take a brief look at both paths. +The good news is that Microsoft plans to support both .NET Framework and .NET Core. In fact, the announcement of .NET Core 3.0 was followed by exciting features in .NET Framework regarding modernization, so let's take a brief look at both paths. Listening to the .NET Framework developer's community suggestions, Microsoft have addressed three main scenarios for **.NET Core**: -- **Side-by-side versions of .NET supporting Windows Forms and WPF: This solves the problem of side effects when updating the machine's framework version. With .NET Core multiple versions can be installed on the same machine and for each application you can specify, which version of .NET Core you'd like it to use. Even more, now you can develop and run Windows Forms and WPF on top of .NET Core. -- **Embed .NET directly into an application: You can now ship the .NET Core as part of your application package. This enables you to take advantage of the latest version, features, and APIs without having to wait for a specific version to be installed on the machine. -- **Take advantage of .NET Core features: .NET Core is the fast-moving, open-source version of .NET. Its side-by-side nature enables fast introduction of new innovative APIs and BCL (Base Class Libraries) improvements without the risk of breaking compatibility. Now Windows Forms and WPF applications on Windows can take advantage of the latest .NET Core features, which also includes more fundamental fixes for runtime performance, high-DPI support, and so on. +- **Side-by-side versions of .NET supporting Windows Forms and WPF**: This solves the problem of side effects when updating the machine's framework version. Multiple versions of .NET Core can be installed on the same machine and each application specifies which version of .NET Core it should use. Even more, now you can develop and run Windows Forms and WPF on top of .NET Core. +- **Embed .NET directly into an application**: You can deploy .NET Core as part of your application package. This enables you to take advantage of the latest version, features, and APIs without having to wait for a specific version to be installed on the machine. +- **Take advantage of .NET Core features**: .NET Core is the fast-moving, open-source version of .NET. Its side-by-side nature enables fast introduction of new innovative APIs and Base Class Libraries (BCL) improvements without the risk of breaking compatibility. Now Windows Forms and WPF applications can take advantage of the latest .NET Core features, which also includes more fundamental fixes for runtime performance, high-DPI support, and so on. -Regarding **.NET Framework 4.8**, Microsoft has addressed three scenarios: +For **.NET Framework 4.8**, Microsoft has addressed three scenarios: -- **Modern browser and media controls: Today, .NET desktop applications use Internet Explorer and Windows Media Player for showing HTML and playing media files. Since these legacy controls don't show the latest HTML or play the latest media files, we are adding new controls that take advantage of Microsoft Edge and newer media players to support the latest standards. -- **Access to UWP Controls: UWP contains new controls that take advantage of the latest Windows features and touch displays. You will not have to rewrite your applications to use these new features and controls. Now they are available to Windows Forms and WPF so that you can take advantage of these new features in your existing code. -- **High DPI improvements: The resolution of displays is increasing to 4K and 8K resolutions. We want to make sure your existing Windows Forms and WPF applications can look great on these new displays. That's why we are adding improvements for HDPI +- **Modern browser and media controls**: Today, .NET desktop applications use Internet Explorer and Windows Media Player for showing HTML and playing media files. Since these legacy controls don't show the latest HTML or play the latest media files, new controls were added that take advantage of Microsoft Edge and newer media players that support the latest standards. +- **Access to UWP controls**: UWP contains new controls that take advantage of the latest Windows features and touch displays. You don't have to rewrite your applications to use these new features and controls, so you can use these new features in your existing WPF or Windows Forms code. +- **High-DPI improvements**: The resolution of displays is increasing to 4K and 8K resolutions. So, .NET Framework 4.8 adds new HDPI improvements to make sure your existing Windows Forms and WPF applications can look great on these new displays. -Since .NET Framework is working on millions of machines, Microsoft will continue to support it but will not be adding new features. +Since .NET Framework is installed on millions of machines, Microsoft will continue to support it but won't add new features. -.NET Core is the open source, cross-platform, and fast-moving version of .NET. Because of its side-by-side nature, it can take changes without the fear of breaking any application. This means that .NET Core will get new APIs and language features over time that .NET Framework cannot. +.NET Core is the open-source, cross-platform, and fast-moving version of .NET. Because of its side-by-side nature, it can take changes without the fear of breaking any application. This means that .NET Core will get new APIs and language features over time that .NET Framework won't. -An essential part of the roadmap is to ease developers to move applications to .NET Core. .NET Core 3.0 takes a huge step by adding WPF, Windows Forms and Entity Framework 6 support, and we will keep porting APIs and features to help close the gap and make migration easier for those who chose to do so. +An essential part of the roadmap is to ease developers to move applications to .NET Core. .NET Core 3.0 takes a huge step by adding WPF, Windows Forms, and Entity Framework 6 support, and we'll keep porting APIs and features to help close the gap and make migration easier for those developers who chose to do so. -So, if you have existing .NET Framework applications, you should not feel pressured to move to .NET Core. .NET Framework will be fully supported and will always be a part of Windows. However, if in the future you want to use the newest language features and APIs, you'll need to move your applications to .NET Core. +If you have existing .NET Framework applications, you shouldn't feel pressured to move to .NET Core. .NET Framework will be fully supported and will always be a part of Windows. However, if you want to use the newest language features and APIs in the future, you'll need to move your applications to .NET Core. -For your brand-new desktop applications, we recommend starting directly on .NET Core. It is lightweight, runs side-by-side, high performance and cross-platform and fits perfectly on containers and microservices architectures. +For your brand new desktop applications, we recommend starting directly on .NET Core. It's lightweight and cross platform, runs side by side, has high performance, and fits perfectly on containers and microservices architectures. ![.NET Framework and .NET Core](./media/whats-new-dotnet-core-desktop/dotnet-framework-and-dotnet-core.png) @@ -94,7 +94,7 @@ The .NET Standard enables the following key scenarios: .NET Standard is the evolution of PCLs and here are the fundamental differences between .NET Standard and PCLs: -- .NET Standard is a set of curated APIs, picked by Microsoft, PCLs are not. +- .NET Standard is a set of curated APIs, picked by Microsoft. PCLs aren't. - The APIs that a PCL contains are dependent on the platforms that you choose to target when you create a PCL. This makes a PCL only sharable for the specific targets that you choose. - .NET Standard is platform-agnostic, it can run anywhere, on Windows, macOS, Linux, and so on. - PCLs can also run cross-platform, but they have a more limited reach. PCLs can only target a limited set of platforms. @@ -103,24 +103,24 @@ The .NET Standard enables the following key scenarios: ### Support for Windows Forms and WPF -Windows Forms and WPF are part of .NET Core 3.0. Both presentation frameworks are only for the Windows OS and they are not cross-platform. You can think of WPF as a rich layer over DirectX and Windows Forms as a thinner layer over GDI+. WPF and Windows Forms do a great job of exposing and exercising much of the desktop application functionality in Windows. With .NET Core 3.0. Windows Forms and WPF become available for .NET Core as well as for .NET Framework. Now you can start your new desktop applications targeting .NET Core and migrate your existing ones from .NET Framework to .NET Core. +Windows Forms and WPF are part of .NET Core 3.0. Both presentation frameworks are for Windows only, so they aren't cross platform. You can think of WPF as a rich layer over DirectX and Windows Forms as a thinner layer over GDI+. WPF and Windows Forms do a great job of exposing and exercising much of the desktop application functionality in Windows. With .NET Core 3.0. Windows Forms and WPF are available for .NET Core and .NET Framework. Now you can start your new desktop applications targeting .NET Core and migrate your existing ones from .NET Framework to .NET Core. A new version of .NET Standard, version 2.1, was released at the same time. As expected, all new .NET Standard APIs are part of .NET Core 3.0. You can build desktop applications with C#, F#, and VB with .NET Core 3.0. -Also, important to notice that both Windows Forms and WPF implementations for .NET Core 3 are being open-sourced. +Also, it's important to notice that both Windows Forms and WPF implementations for .NET Core 3.0 are being open sourced. ### XAML Islands XAML Islands is a set of components for developers to use the new Windows 10 controls (UWP XAML controls) in their current WPF, Windows Forms, and native Win32 apps (like MFC). You can have your "islands" of UWP XAML controls wherever you want inside your Win32 apps. -These XAML Islands are possible because Windows 10 1903 update introduces a set of APIs that allows hosting UWP XAML content in Win32 windows using windows handlers (HWnds). Notice that only apps running on Windows 10 1903 and above can use XAML Islands. +These XAML Islands are possible because Windows 10, version 1903 introduces a set of APIs that allows hosting UWP XAML content in Win32 windows using windows handlers (HWnds). Notice that only apps running on Windows 10 1903 and above can use XAML Islands. -To facilitate to create XAML Islands for Windows Forms and WPF developers, the Windows Community Toolkit introduces a set of .NET wrappers in several NuGet packages. Those wrappers are the Wrapped Controls and Hosting Controls: +To make it easier to create XAML Islands for Windows Forms and WPF developers, the Windows Community Toolkit introduces a set of .NET wrappers in several NuGet packages. Those wrappers are the wrapped and hosting controls: -- The WebView, WebViewCompatible, [InkCanvas](/windows/communitytoolkit/controls/wpf-winforms/inkcanvas), [MediaPlayerElement](/windows/communitytoolkit/controls/wpf-winforms/mediaplayerelement), and [MapControl](/windows/communitytoolkit/controls/wpf-winforms/mapcontrol) wrapped controls wrap some UWP XAML controls into Windows Forms or WPF controls, hiding UWP concepts for those developers. -- The WindowsXamlHost control for Windows Forms and WPF allows others not-wrapped UWP XAML controls and custom controls can be loaded into a XAML Island. +- The [WebView](/windows/communitytoolkit/controls/wpf-winforms/webview), [WebViewCompatible](/windows/communitytoolkit/controls/wpf-winforms/webviewcompatible), [InkCanvas](/windows/communitytoolkit/controls/wpf-winforms/inkcanvas), [MediaPlayerElement](/windows/communitytoolkit/controls/wpf-winforms/mediaplayerelement), and [MapControl](/windows/communitytoolkit/controls/wpf-winforms/mapcontrol) wrapped controls wrap some UWP XAML controls into Windows Forms or WPF controls, hiding UWP concepts for those developers. +- The [WindowsXamlHost](/windows/communitytoolkit/controls/wpf-winforms/windowsxamlhost) control for Windows Forms and WPF allows others not-wrapped UWP XAML controls and custom controls can be loaded into a XAML Island. ### Access to all Windows 10 APIs @@ -138,12 +138,12 @@ These deployment options were requested by developers for quite a long time but ### Performance -Since its inception, targeting the Web and Cloud workloads, .NET Core has had performance plugged into its DNA. Server-side code must be performant enough to fulfill high concurrency scenarios and .NET Core scores today as the best performance web platform in the market. +Since its start, targeting the web and cloud workloads, .NET Core has had performance plugged into its DNA. Server-side code must be performant enough to fulfill high-concurrency scenarios and .NET Core scores today as the best performance web platform in the market. -You can now take advantage of these performance improvements when you use it to build your next generation of desktop applications. +You can take advantage of these performance improvements when you use .NET Core to build your next generation of desktop applications. -## Benefits of open-source +## Benefits of open source Just a few words about .NET Core being open source. Building a cross-platform stack is something complex that needs the interaction of specialized teams on each of the targeted platforms. This effort needs much collaboration from inside and outside of Microsoft. By making it open source and thus open to public collaboration, you get the ultimate agile development style in place, raising the quality bar since issues are detected by a huge and active community of developers. -This is a key success factor of .NET Core that will continue to speed up the roadmap mentioned above: To be the single .NET platform that any developer will ever need to build any application. +This is a key success factor of .NET Core that will continue to speed up the roadmap previously mentioned: To be the single .NET platform that any developer will ever need to build any application. From e0d83e3e2a7ddb39a5a29109880a96d743bf929f Mon Sep 17 00:00:00 2001 From: oliag Date: Thu, 26 Mar 2020 17:36:32 -0700 Subject: [PATCH 4/8] Address Maira's comments --- .../all-domains-of-dotnet5.png | Bin .../different-technologies.png | Bin .../framework-vs-core.png} | Bin .../release-history.png} | Bin ...re-desktop.md => whats-new-dotnet-core.md} | 43 ++++++++---------- 5 files changed, 18 insertions(+), 25 deletions(-) rename docs/architecture/modernize-desktop/media/{whats-new-dotnet-core-desktop => whats-new-dotnet-core}/all-domains-of-dotnet5.png (100%) rename docs/architecture/modernize-desktop/media/{whats-new-dotnet-core-desktop => whats-new-dotnet-core}/different-technologies.png (100%) rename docs/architecture/modernize-desktop/media/{whats-new-dotnet-core-desktop/dotnet-framework-and-dotnet-core.png => whats-new-dotnet-core/framework-vs-core.png} (100%) rename docs/architecture/modernize-desktop/media/{whats-new-dotnet-core-desktop/release-history-of -dotnet.png => whats-new-dotnet-core/release-history.png} (100%) rename docs/architecture/modernize-desktop/{whats-new-dotnet-core-desktop.md => whats-new-dotnet-core.md} (80%) diff --git a/docs/architecture/modernize-desktop/media/whats-new-dotnet-core-desktop/all-domains-of-dotnet5.png b/docs/architecture/modernize-desktop/media/whats-new-dotnet-core/all-domains-of-dotnet5.png similarity index 100% rename from docs/architecture/modernize-desktop/media/whats-new-dotnet-core-desktop/all-domains-of-dotnet5.png rename to docs/architecture/modernize-desktop/media/whats-new-dotnet-core/all-domains-of-dotnet5.png diff --git a/docs/architecture/modernize-desktop/media/whats-new-dotnet-core-desktop/different-technologies.png b/docs/architecture/modernize-desktop/media/whats-new-dotnet-core/different-technologies.png similarity index 100% rename from docs/architecture/modernize-desktop/media/whats-new-dotnet-core-desktop/different-technologies.png rename to docs/architecture/modernize-desktop/media/whats-new-dotnet-core/different-technologies.png diff --git a/docs/architecture/modernize-desktop/media/whats-new-dotnet-core-desktop/dotnet-framework-and-dotnet-core.png b/docs/architecture/modernize-desktop/media/whats-new-dotnet-core/framework-vs-core.png similarity index 100% rename from docs/architecture/modernize-desktop/media/whats-new-dotnet-core-desktop/dotnet-framework-and-dotnet-core.png rename to docs/architecture/modernize-desktop/media/whats-new-dotnet-core/framework-vs-core.png diff --git a/docs/architecture/modernize-desktop/media/whats-new-dotnet-core-desktop/release-history-of -dotnet.png b/docs/architecture/modernize-desktop/media/whats-new-dotnet-core/release-history.png similarity index 100% rename from docs/architecture/modernize-desktop/media/whats-new-dotnet-core-desktop/release-history-of -dotnet.png rename to docs/architecture/modernize-desktop/media/whats-new-dotnet-core/release-history.png diff --git a/docs/architecture/modernize-desktop/whats-new-dotnet-core-desktop.md b/docs/architecture/modernize-desktop/whats-new-dotnet-core.md similarity index 80% rename from docs/architecture/modernize-desktop/whats-new-dotnet-core-desktop.md rename to docs/architecture/modernize-desktop/whats-new-dotnet-core.md index 28190e816ecf7..973c799710d4f 100644 --- a/docs/architecture/modernize-desktop/whats-new-dotnet-core-desktop.md +++ b/docs/architecture/modernize-desktop/whats-new-dotnet-core.md @@ -1,16 +1,18 @@ --- -title: What's new with .NET Core 3.0 for Desktop? -description: . +title: What's new with .NET Core 3 for Desktop? +description: Learn about .NET Core, differences between .NET COre and .NET Framework and the new features tht were added in the latest version of the .NET Core - version 3. ms.date: 09/16/2019 --- -# What's new with .NET Core 3.0 for Desktop? +# What's new with .NET Core 3 for Desktop? + +From the version 3.0, .NET Core supports Windows Forms and WPF, so now you have a choice between .NET Framework and .NET Core for your desktop applications. This chapter will describe what is .NET Core and what are it's benefits for desktop applications. ## From .NET Framework to .NET Core - The motivation behind .NET Core -Since its inception in 2002, .NET Framework has evolved through the years to support many technologies like Windows Forms, ASP.NET, Entity Framework, Windows Store, and many others. All of them are different in nature. Therefore, Microsoft was approaching this evolution by taking parts of the .NET Framework and creating a different application stack for each technology. That way, development capabilities could be customized for the needs of the specific stack, which maximized the potential of every platform. That lead to fragmentation on the versions of the .NET Framework maintained by different independent teams. All these stacks have a common structure, containing an App Model, a Framework, and a Runtime, but they differ in the implementation of each of these parts. +Since its launch in 2002, .NET Framework has evolved through the years to support many technologies like Windows Forms, ASP.NET, Entity Framework, Windows Store, and many others. All of them are different in nature. Therefore, Microsoft was approaching this evolution by taking parts of the .NET Framework and creating a different application stack for each technology. That way, development capabilities could be customized for the needs of the specific stack, which maximized the potential of every platform. That lead to fragmentation on the versions of the .NET Framework maintained by different independent teams. All these stacks have a common structure, containing an App Model, a Framework, and a Runtime, but they differ in the implementation of each of these parts. -![Different Microsoft technologies](./media/whats-new-dotnet-core-desktop/different-technologies.png) +![Illustration showing the different desktop technologies and their components](./media/whats-new-dotnet-core-desktop/different-technologies.png) If you're targeting only one of these platforms, you can use this model. However, in many cases you might need more than one target platform in the same solution. For example, your application may have a desktop admin part, a customer-facing web site that shares the back-end logic running on a server, and even a mobile client. In this case, you need a unified coding experience that can span all this .NET verticals. @@ -20,7 +22,7 @@ This leads to reasoning about the API differences between verticals at the assem ![Release history of .NET Framework](./media/whats-new-dotnet-core-desktop/release-history.png) -With PCL, the experience of development is unified across verticals based on the API shape. And the most pressing need to create libraries running on different verticals is also addressed. But there's still a great challenge: APIs are only portable when the implementation is moved forward across all the verticals, and still verticals have independent implementations. +With PCL, the experience of development is unified across verticals based on the API shape. And the most pressing need to create libraries running on different verticals is also addressed. But there's a great challenge: APIs are only portable when the implementation is moved forward across all the verticals. A better approach is to unify the implementations across verticals by providing a well-factored implementation instead of a well-factored view. It's a lot simpler to ask each team that owns a specific component to think about how their APIs work across all verticals than trying to retroactively provide a consistent API stack on top. This is where .NET Standard comes in. See details on the next section. @@ -56,15 +58,7 @@ In .NET Core 3.0, besides the existing support for web and cloud, there's also s So now that you understand the relevance of .NET Core inside the Microsoft strategy for .NET, you might be wondering what happens with .NET Framework. You could be asking questions like: do you have to abandon it? Is it going to disappear? What are my choices to modernize the applications I have on .NET Framework? -The good news is that Microsoft plans to support both .NET Framework and .NET Core. In fact, the announcement of .NET Core 3.0 was followed by exciting features in .NET Framework regarding modernization, so let's take a brief look at both paths. - -Listening to the .NET Framework developer's community suggestions, Microsoft have addressed three main scenarios for **.NET Core**: - -- **Side-by-side versions of .NET supporting Windows Forms and WPF**: This solves the problem of side effects when updating the machine's framework version. Multiple versions of .NET Core can be installed on the same machine and each application specifies which version of .NET Core it should use. Even more, now you can develop and run Windows Forms and WPF on top of .NET Core. -- **Embed .NET directly into an application**: You can deploy .NET Core as part of your application package. This enables you to take advantage of the latest version, features, and APIs without having to wait for a specific version to be installed on the machine. -- **Take advantage of .NET Core features**: .NET Core is the fast-moving, open-source version of .NET. Its side-by-side nature enables fast introduction of new innovative APIs and Base Class Libraries (BCL) improvements without the risk of breaking compatibility. Now Windows Forms and WPF applications can take advantage of the latest .NET Core features, which also includes more fundamental fixes for runtime performance, high-DPI support, and so on. - -For **.NET Framework 4.8**, Microsoft has addressed three scenarios: +In 2019 the last version of the **.NET Framework - 4.8** was released. It included three major improvements for desktop applications: - **Modern browser and media controls**: Today, .NET desktop applications use Internet Explorer and Windows Media Player for showing HTML and playing media files. Since these legacy controls don't show the latest HTML or play the latest media files, new controls were added that take advantage of Microsoft Edge and newer media players that support the latest standards. - **Access to UWP controls**: UWP contains new controls that take advantage of the latest Windows features and touch displays. You don't have to rewrite your applications to use these new features and controls, so you can use these new features in your existing WPF or Windows Forms code. @@ -72,25 +66,26 @@ For **.NET Framework 4.8**, Microsoft has addressed three scenarios: Since .NET Framework is installed on millions of machines, Microsoft will continue to support it but won't add new features. -.NET Core is the open-source, cross-platform, and fast-moving version of .NET. Because of its side-by-side nature, it can take changes without the fear of breaking any application. This means that .NET Core will get new APIs and language features over time that .NET Framework won't. +.NET Core is the open-source, cross-platform, and fast-moving version of .NET. Because of its side-by-side nature, it can take changes without the fear of breaking any application. This means that .NET Core will get new APIs and language features over time that .NET Framework won't. Also, **.NET Core** already has features, that were impossible for .NET Framework, such as: -An essential part of the roadmap is to ease developers to move applications to .NET Core. .NET Core 3.0 takes a huge step by adding WPF, Windows Forms, and Entity Framework 6 support, and we'll keep porting APIs and features to help close the gap and make migration easier for those developers who chose to do so. +- **Side-by-side versions of .NET supporting Windows Forms and WPF**: This solves the problem of side effects when updating the machine's framework version. Multiple versions of .NET Core can be installed on the same machine and each application specifies which version of .NET Core it should use. Even more, now you can develop and run Windows Forms and WPF on top of .NET Core. +- **Embed .NET directly into an application**: You can deploy .NET Core as part of your application package. This enables you to take advantage of the latest version, features, and APIs without having to wait for a specific version to be installed on the machine. +- **Take advantage of .NET Core features**: .NET Core is the fast-moving, open-source version of .NET. Its side-by-side nature enables fast introduction of new innovative APIs and Base Class Libraries (BCL) improvements without the risk of breaking compatibility. Now Windows Forms and WPF applications can take advantage of the latest .NET Core features, which also includes more fundamental fixes for runtime performance, high-DPI support, and so on. -If you have existing .NET Framework applications, you shouldn't feel pressured to move to .NET Core. .NET Framework will be fully supported and will always be a part of Windows. However, if you want to use the newest language features and APIs in the future, you'll need to move your applications to .NET Core. +An essential part of the roadmap for Microsoft was to ease developers to move applications to .NET Core and in future to .NET 5. But if you have existing .NET Framework applications, you shouldn't feel pressured to move to .NET Core. .NET Framework will be fully supported and will always be a part of Windows. However, if you want to use the newest language features and APIs in the future, you'll need to move your applications to .NET Core. For your brand new desktop applications, we recommend starting directly on .NET Core. It's lightweight and cross platform, runs side by side, has high performance, and fits perfectly on containers and microservices architectures. -![.NET Framework and .NET Core](./media/whats-new-dotnet-core-desktop/dotnet-framework-and-dotnet-core.png) +![You can update your .NET Framework applications using the latest .NET Framework version or port your applications to .NET Core](./media/whats-new-dotnet-core-desktop/framework-vs-core.png) ## .NET Standard vs. PCL -The [.NET Standard](https://github.com/dotnet/standard) is a formal specification of .NET APIs that are intended to be available on all .NET implementations. The motivation behind the .NET Standard is establishing greater uniformity in the .NET ecosystem. .NET Standard is a specification of .NET APIs that make up a uniform set of contracts to compile your code against. These contracts are implemented in each .NET flavor, thus enabling portability across different .NET implementations. +The [.NET Standard](../../standard/net-standard.md) is a formal specification of .NET APIs that are intended to be available on all .NET implementations. The motivation behind the .NET Standard is establishing greater uniformity in the .NET ecosystem. .NET Standard is a specification of .NET APIs that make up a uniform set of contracts to compile your code against. These contracts are implemented in each .NET flavor, thus enabling portability across different .NET implementations. The .NET Standard enables the following key scenarios: - Defines uniform set of base class libraries APIs for all .NET implementations to implement, independent of the workload. - Enables developers to produce portable libraries that are usable across .NET implementations, using this same set of APIs. -- Reduces or even eliminates conditional compilation of shared source due to .NET APIs, only for OS APIs. .NET Standard is the evolution of PCLs and here are the fundamental differences between .NET Standard and PCLs: @@ -99,7 +94,7 @@ The .NET Standard enables the following key scenarios: - .NET Standard is platform-agnostic, it can run anywhere, on Windows, macOS, Linux, and so on. - PCLs can also run cross-platform, but they have a more limited reach. PCLs can only target a limited set of platforms. -## .NET Core 3.0 new Desktop features +## .NET Core 3 new Desktop features ### Support for Windows Forms and WPF @@ -107,13 +102,11 @@ Windows Forms and WPF are part of .NET Core 3.0. Both presentation frameworks ar A new version of .NET Standard, version 2.1, was released at the same time. As expected, all new .NET Standard APIs are part of .NET Core 3.0. -You can build desktop applications with C#, F#, and VB with .NET Core 3.0. - Also, it's important to notice that both Windows Forms and WPF implementations for .NET Core 3.0 are being open sourced. ### XAML Islands -XAML Islands is a set of components for developers to use the new Windows 10 controls (UWP XAML controls) in their current WPF, Windows Forms, and native Win32 apps (like MFC). You can have your "islands" of UWP XAML controls wherever you want inside your Win32 apps. +[XAML Islands](/windows/apps/desktop/modernize/xaml-islands) is a set of components for developers to use the new Windows 10 controls (UWP XAML controls) in their current WPF, Windows Forms, and native Win32 apps (like MFC). You can have your "islands" of UWP XAML controls wherever you want inside your Win32 apps. These XAML Islands are possible because Windows 10, version 1903 introduces a set of APIs that allows hosting UWP XAML content in Win32 windows using windows handlers (HWnds). Notice that only apps running on Windows 10 1903 and above can use XAML Islands. From 17409de3e917de37a6eb849315d172d9adbb04ae Mon Sep 17 00:00:00 2001 From: oliag Date: Thu, 26 Mar 2020 17:44:13 -0700 Subject: [PATCH 5/8] Remove trailing space --- docs/architecture/modernize-desktop/whats-new-dotnet-core.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/architecture/modernize-desktop/whats-new-dotnet-core.md b/docs/architecture/modernize-desktop/whats-new-dotnet-core.md index 973c799710d4f..3b181043806b7 100644 --- a/docs/architecture/modernize-desktop/whats-new-dotnet-core.md +++ b/docs/architecture/modernize-desktop/whats-new-dotnet-core.md @@ -12,8 +12,6 @@ From the version 3.0, .NET Core supports Windows Forms and WPF, so now you have Since its launch in 2002, .NET Framework has evolved through the years to support many technologies like Windows Forms, ASP.NET, Entity Framework, Windows Store, and many others. All of them are different in nature. Therefore, Microsoft was approaching this evolution by taking parts of the .NET Framework and creating a different application stack for each technology. That way, development capabilities could be customized for the needs of the specific stack, which maximized the potential of every platform. That lead to fragmentation on the versions of the .NET Framework maintained by different independent teams. All these stacks have a common structure, containing an App Model, a Framework, and a Runtime, but they differ in the implementation of each of these parts. -![Illustration showing the different desktop technologies and their components](./media/whats-new-dotnet-core-desktop/different-technologies.png) - If you're targeting only one of these platforms, you can use this model. However, in many cases you might need more than one target platform in the same solution. For example, your application may have a desktop admin part, a customer-facing web site that shares the back-end logic running on a server, and even a mobile client. In this case, you need a unified coding experience that can span all this .NET verticals. By the time Windows 8 was released, the concept of the Portable Class Libraries (PCL) was born. Originally, the .NET Framework was designed around the assumption that it would always be deployed as a single unit, so [factoring](http://en.wikipedia.org/wiki/Decomposition_(computer_science)) wasn't a concern. To face the problem of code sharing between verticals, the driving force was on how to refactor the framework. The idea of contracts is to provide a well-factored API surface area. Contracts are simply assemblies that you compile against and are designed with proper factoring in mind taking care of the dependencies between them. @@ -58,7 +56,7 @@ In .NET Core 3.0, besides the existing support for web and cloud, there's also s So now that you understand the relevance of .NET Core inside the Microsoft strategy for .NET, you might be wondering what happens with .NET Framework. You could be asking questions like: do you have to abandon it? Is it going to disappear? What are my choices to modernize the applications I have on .NET Framework? -In 2019 the last version of the **.NET Framework - 4.8** was released. It included three major improvements for desktop applications: +In 2019 the last version of the **.NET Framework - 4.8** was released. It included three major improvements for desktop applications: - **Modern browser and media controls**: Today, .NET desktop applications use Internet Explorer and Windows Media Player for showing HTML and playing media files. Since these legacy controls don't show the latest HTML or play the latest media files, new controls were added that take advantage of Microsoft Edge and newer media players that support the latest standards. - **Access to UWP controls**: UWP contains new controls that take advantage of the latest Windows features and touch displays. You don't have to rewrite your applications to use these new features and controls, so you can use these new features in your existing WPF or Windows Forms code. From d7aa8b86582f6e1792fcc39a5af8665dd55b6934 Mon Sep 17 00:00:00 2001 From: oliag Date: Thu, 26 Mar 2020 20:29:51 -0700 Subject: [PATCH 6/8] Add Previous and next buttons --- docs/architecture/modernize-desktop/whats-new-dotnet-core.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/architecture/modernize-desktop/whats-new-dotnet-core.md b/docs/architecture/modernize-desktop/whats-new-dotnet-core.md index 3b181043806b7..741d09aed3a11 100644 --- a/docs/architecture/modernize-desktop/whats-new-dotnet-core.md +++ b/docs/architecture/modernize-desktop/whats-new-dotnet-core.md @@ -138,3 +138,7 @@ You can take advantage of these performance improvements when you use .NET Core Just a few words about .NET Core being open source. Building a cross-platform stack is something complex that needs the interaction of specialized teams on each of the targeted platforms. This effort needs much collaboration from inside and outside of Microsoft. By making it open source and thus open to public collaboration, you get the ultimate agile development style in place, raising the quality bar since issues are detected by a huge and active community of developers. This is a key success factor of .NET Core that will continue to speed up the roadmap previously mentioned: To be the single .NET platform that any developer will ever need to build any application. + +>[!div class="step-by-step"] +>[Previous](why-modern-desktop-applications.md) +>[Next](migrating-modern-desktop-applications.md) \ No newline at end of file From 791e40d64ed01ac6f03c51d5faae8b978ee36f9d Mon Sep 17 00:00:00 2001 From: oliag Date: Thu, 26 Mar 2020 20:32:41 -0700 Subject: [PATCH 7/8] Removed whitespace --- docs/architecture/modernize-desktop/whats-new-dotnet-core.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/architecture/modernize-desktop/whats-new-dotnet-core.md b/docs/architecture/modernize-desktop/whats-new-dotnet-core.md index 741d09aed3a11..de26ea2abec97 100644 --- a/docs/architecture/modernize-desktop/whats-new-dotnet-core.md +++ b/docs/architecture/modernize-desktop/whats-new-dotnet-core.md @@ -141,4 +141,4 @@ This is a key success factor of .NET Core that will continue to speed up the roa >[!div class="step-by-step"] >[Previous](why-modern-desktop-applications.md) ->[Next](migrating-modern-desktop-applications.md) \ No newline at end of file +>[Next](migrating-modern-desktop-applications.md) From 28fd2a30dd2fa204f3e1cfd408cb9dd84abb5aad Mon Sep 17 00:00:00 2001 From: Olia Gavrysh <31997351+OliaG@users.noreply.github.com> Date: Fri, 10 Apr 2020 13:43:04 -0700 Subject: [PATCH 8/8] Apply suggestions from code review Co-Authored-By: Maira Wenzel --- .../whats-new-dotnet-core.md | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/docs/architecture/modernize-desktop/whats-new-dotnet-core.md b/docs/architecture/modernize-desktop/whats-new-dotnet-core.md index de26ea2abec97..3c2cdc7ff4269 100644 --- a/docs/architecture/modernize-desktop/whats-new-dotnet-core.md +++ b/docs/architecture/modernize-desktop/whats-new-dotnet-core.md @@ -1,12 +1,12 @@ --- -title: What's new with .NET Core 3 for Desktop? -description: Learn about .NET Core, differences between .NET COre and .NET Framework and the new features tht were added in the latest version of the .NET Core - version 3. +title: What's new with .NET Core 3.0 for Desktop? +description: Learn about .NET Core, differences between .NET Core and .NET Framework and the new features that were added in .NET Core 3.0. ms.date: 09/16/2019 --- -# What's new with .NET Core 3 for Desktop? +# What's new with .NET Core 3.0 for Desktop? -From the version 3.0, .NET Core supports Windows Forms and WPF, so now you have a choice between .NET Framework and .NET Core for your desktop applications. This chapter will describe what is .NET Core and what are it's benefits for desktop applications. +Starting with .NET Core 3.0, .NET Core supports Windows Forms and WPF. So, now you have a choice between .NET Framework and .NET Core for your desktop applications. This chapter will describe what is .NET Core and what are its benefits for desktop applications. ## From .NET Framework to .NET Core - The motivation behind .NET Core @@ -14,11 +14,11 @@ Since its launch in 2002, .NET Framework has evolved through the years to suppor If you're targeting only one of these platforms, you can use this model. However, in many cases you might need more than one target platform in the same solution. For example, your application may have a desktop admin part, a customer-facing web site that shares the back-end logic running on a server, and even a mobile client. In this case, you need a unified coding experience that can span all this .NET verticals. -By the time Windows 8 was released, the concept of the Portable Class Libraries (PCL) was born. Originally, the .NET Framework was designed around the assumption that it would always be deployed as a single unit, so [factoring](http://en.wikipedia.org/wiki/Decomposition_(computer_science)) wasn't a concern. To face the problem of code sharing between verticals, the driving force was on how to refactor the framework. The idea of contracts is to provide a well-factored API surface area. Contracts are simply assemblies that you compile against and are designed with proper factoring in mind taking care of the dependencies between them. +By the time Windows 8 was released, the concept of Portable Class Libraries (PCLs) was born. Originally, the .NET Framework was designed around the assumption that it would always be deployed as a single unit, so [factoring](http://en.wikipedia.org/wiki/Decomposition_(computer_science)) wasn't a concern. To face the problem of code sharing between verticals, the driving force was on how to refactor the framework. The idea of contracts is to provide a well-factored API surface area. Contracts are simply assemblies that you compile against and are designed with proper factoring in mind taking care of the dependencies between them. This leads to reasoning about the API differences between verticals at the assembly level, as opposed to the individual API level that we had before. This aspect enabled a class library experience that can target multiple verticals, also known as portable class libraries. -![Release history of .NET Framework](./media/whats-new-dotnet-core-desktop/release-history.png) +![Release history of .NET Framework](./media/whats-new-dotnet-core/release-history.png) With PCL, the experience of development is unified across verticals based on the API shape. And the most pressing need to create libraries running on different verticals is also addressed. But there's a great challenge: APIs are only portable when the implementation is moved forward across all the verticals. @@ -50,7 +50,7 @@ The benefits of .NET Core come from these three characteristics: In .NET Core 3.0, besides the existing support for web and cloud, there's also support for desktop, IoT, and AI domains. The goal for this framework is impressive: to target every type of .NET development present and future. Microsoft plans to complete this vision with .NET 5 at the end of 2020. The "Core" name was removed to reinforce its uniqueness in the .NET world. -![All domains of .NET 5](./media/whats-new-dotnet-core-desktop/all-domains-of-dotnet5.png) +![All domains of .NET 5](./media/whats-new-dotnet-core/all-domains-of-dotnet5.png) ## .NET Framework vs. .NET Core @@ -64,7 +64,7 @@ In 2019 the last version of the **.NET Framework - 4.8** was released. It includ Since .NET Framework is installed on millions of machines, Microsoft will continue to support it but won't add new features. -.NET Core is the open-source, cross-platform, and fast-moving version of .NET. Because of its side-by-side nature, it can take changes without the fear of breaking any application. This means that .NET Core will get new APIs and language features over time that .NET Framework won't. Also, **.NET Core** already has features, that were impossible for .NET Framework, such as: +.NET Core is the open-source, cross-platform, and fast-moving version of .NET. Because of its side-by-side nature, it can take changes without the fear of breaking any application. This means that .NET Core will get new APIs and language features over time that .NET Framework won't. Also, **.NET Core** already has features that were impossible for .NET Framework, such as: - **Side-by-side versions of .NET supporting Windows Forms and WPF**: This solves the problem of side effects when updating the machine's framework version. Multiple versions of .NET Core can be installed on the same machine and each application specifies which version of .NET Core it should use. Even more, now you can develop and run Windows Forms and WPF on top of .NET Core. - **Embed .NET directly into an application**: You can deploy .NET Core as part of your application package. This enables you to take advantage of the latest version, features, and APIs without having to wait for a specific version to be installed on the machine. @@ -72,9 +72,9 @@ Since .NET Framework is installed on millions of machines, Microsoft will contin An essential part of the roadmap for Microsoft was to ease developers to move applications to .NET Core and in future to .NET 5. But if you have existing .NET Framework applications, you shouldn't feel pressured to move to .NET Core. .NET Framework will be fully supported and will always be a part of Windows. However, if you want to use the newest language features and APIs in the future, you'll need to move your applications to .NET Core. -For your brand new desktop applications, we recommend starting directly on .NET Core. It's lightweight and cross platform, runs side by side, has high performance, and fits perfectly on containers and microservices architectures. +For your brand-new desktop applications, we recommend starting directly on .NET Core. It's lightweight and cross platform, runs side by side, has high performance, and fits perfectly on containers and microservices architectures. -![You can update your .NET Framework applications using the latest .NET Framework version or port your applications to .NET Core](./media/whats-new-dotnet-core-desktop/framework-vs-core.png) +![You can update your .NET Framework applications using the latest .NET Framework version or port your applications to .NET Core](./media/whats-new-dotnet-core/framework-vs-core.png) ## .NET Standard vs. PCL @@ -85,18 +85,18 @@ The .NET Standard enables the following key scenarios: - Defines uniform set of base class libraries APIs for all .NET implementations to implement, independent of the workload. - Enables developers to produce portable libraries that are usable across .NET implementations, using this same set of APIs. -.NET Standard is the evolution of PCLs and here are the fundamental differences between .NET Standard and PCLs: +.NET Standard is the evolution of PCLs and the following list shows the fundamental differences between .NET Standard and PCLs: - .NET Standard is a set of curated APIs, picked by Microsoft. PCLs aren't. -- The APIs that a PCL contains are dependent on the platforms that you choose to target when you create a PCL. This makes a PCL only sharable for the specific targets that you choose. +- The APIs that a PCL contains are dependent on the platforms that you choose to target when you create it. This makes a PCL only sharable for the specific targets that you choose. - .NET Standard is platform-agnostic, it can run anywhere, on Windows, macOS, Linux, and so on. - PCLs can also run cross-platform, but they have a more limited reach. PCLs can only target a limited set of platforms. -## .NET Core 3 new Desktop features +## New Desktop features in .NET Core 3.0 ### Support for Windows Forms and WPF -Windows Forms and WPF are part of .NET Core 3.0. Both presentation frameworks are for Windows only, so they aren't cross platform. You can think of WPF as a rich layer over DirectX and Windows Forms as a thinner layer over GDI+. WPF and Windows Forms do a great job of exposing and exercising much of the desktop application functionality in Windows. With .NET Core 3.0. Windows Forms and WPF are available for .NET Core and .NET Framework. Now you can start your new desktop applications targeting .NET Core and migrate your existing ones from .NET Framework to .NET Core. +Windows Forms and WPF are part of .NET Core 3.0. Both presentation frameworks are for Windows only, so they aren't cross platform. You can think of WPF as a rich layer over DirectX and Windows Forms as a thinner layer over GDI+. WPF and Windows Forms do a great job of exposing and exercising much of the desktop application functionality in Windows. With .NET Core 3.0, Windows Forms and WPF are available for .NET Core and .NET Framework. Now you can start your new desktop applications targeting .NET Core and migrate your existing ones from .NET Framework to .NET Core. A new version of .NET Standard, version 2.1, was released at the same time. As expected, all new .NET Standard APIs are part of .NET Core 3.0. @@ -141,4 +141,4 @@ This is a key success factor of .NET Core that will continue to speed up the roa >[!div class="step-by-step"] >[Previous](why-modern-desktop-applications.md) ->[Next](migrating-modern-desktop-applications.md) +>[Next](migrate-modern-applications.md)