9月,我们发布了.NET Core支持,用于构建Windows桌面应用程序,包括WPF和Windows Forms。 从那时起,我们很高兴看到许多开发人员分享了有关将桌面应用程序移植到.NET Core的故事。 我们经常听到来自Windows桌面应用程序的.NET开发人员的故事,这些故事涉及他们如何使用WPF和Windows Forms支持其业务,尤其是当桌面赢得胜利时,包括:
- 具有密集UI的FOD应用程序(基于数据的表单)
- 响应式,低延迟的用户界面
- 必须脱机工作的应用程序
- 依赖于自定义设备驱动程序的应用程序
窥视一下以了解有关.NET Core在构建Windows应用程序方面的好处的更多信息。

为什么Windows桌面在.NET Core上?
.NET Core(以及将来基于.NET Core构建的.NET 5)将成为.NET的未来。 我们努力尽可能地支持.NET Framework,但是它不会收到任何新功能,它们只会添加到.NET Core(最终是.NET 5)中。 为了改进Windows桌面堆栈并允许.NET桌面开发人员从将来的所有更新中受益,我们引入了Windows Forms和WPF for .NET Core。 它们将继续是仅Windows的技术,因为它们与Windows API紧密相关。 但是.NET Core除了跨平台之外,还具有许多其他功能,可以改善桌面应用程序。
首先,所有运行时改进和语言功能将仅在.NET Core中添加,将来在.NET 5中添加。C#8是一个很好的示例,它已在.NET Core 3.0中可用。 此外,Windows窗体和WPF的.NET Core版本将成为.NET 5平台的一部分,并且,将应用程序移植到.NET Core时,您需要为.NET 5做准备。
此外,.NET Core还具有.NET Framework中不可用的新选项,从而为您的应用程序提供了部署灵活性,例如:
- 并行部署 现在,您可以在一台计算机上拥有多个版本的.NET Core,并且可以选择每个应用程序应关注的版本。
- 离线部署。 您可以将.NET Core平台与应用程序一起部署,并完全独立于最终用户环境-您的应用程序具有在任何Windows计算机上运行所需的一切。
- 较小的应用程序大小。 在.NET Core 3中,我们引入了一个称为链接器(有时也称为修剪器)的新功能,该功能将分析您的代码,并仅将脱机部署中包含应用程序所需的.NET Core程序集包括在内。 因此,将删除您未使用的所有平台详细信息。
- 单个.exe文件。 您可以将应用程序和.NET Core平台打包到单个.exe文件中。
- 改进的运行时性能。 .NET Core在.NET Framework上进行了许多性能优化。 如果您回想起了最初为Web和服务器上的工作负载创建的.NET Core的历史,它有助于了解您的应用程序是否可以从优化运行时中获得显着的收益。 特别是,高度依赖文件I / O,网络和数据库操作的桌面应用程序可能会在这些情况下显示出性能上的提高。 您可能没有注意到明显变化的某些区域与用户界面渲染性能或应用程序启动有关。
通过在发布配置文件中设置属性
<PublishSingleFile>
,
<RuntimeIdentifier>
和
<PublishTrimmed>
,可以将裁剪后的独立应用程序部署为单个.exe文件,如下例所示。
<PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp3.0</TargetFramework> <PublishSingleFile>true</PublishSingleFile> <RuntimeIdentifier>win-x64</RuntimeIdentifier> <PublishTrimmed>true</PublishTrimmed> </PropertyGroup>
.NET Framework桌面和.NET Core桌面之间的区别
在开发桌面应用程序时,您不会注意到WPF和.NET Framework和.NET Core的Windows窗体版本之间有很大差异。 我们的部分工作是在这些桌面平台之间提供功能相似性,并增强.NET Core的未来。
.NET Core完全支持WPF应用程序,您可以在我们进行较小的更新和改进时开始使用它们。 对于Windows窗体,运行时已完全移植到.NET Core,并且该团队目前正在使用Windows窗体设计器。 我们计划为2020年第四季度做准备,但是现在您可以在
Visual Studio 16.4 Preview 3或更高版本中检查设计器的初始版本。 切记选中“工具”->“选项”->“预览功能”->“。NET Core应用程序的Windows窗体设计器预览”下的复选框,然后重新启动Visual Studio。 请记住,由于工作仍在进行中,因此使用经验仍然有限。
重要变化
.NET Framework和.NET Core进行了一些
重大更改 ,但是与Windows窗体和WPF区域相关的大多数代码都以相同的方式移植到了Core。 如果以前使用过WCF客户端,代码访问安全性,应用程序域,互操作性和远程处理等组件,则要切换到.NET Core,则需要重构代码。
请记住一件事:.NET Core中的默认输出路径与.NET Framework中的路径不同,因此,如果您的代码对正在运行的应用程序的文件/文件夹结构有一些假设,则它可能会在运行时使用。
.NET功能的配置也有所更改。 .NET Core不用使用
machine.config
文件,而是使用应用程序随附的
<something>.runtimeconfig.json
文件,该文件具有相同的主要用途和相似的信息。 不支持某些配置,例如
system.diagnostics
,
system.net
或
system.servicemodel
,因此如果包含这些部分中的任何一个,则无法加载应用程序配置文件。 此更改适用于以前通常使用XML配置配置的
System.Diagnostics
跟踪和WCF客户端脚本。 在.NET Core中,您需要改为在代码中进行配置。 若要更改行为而不进行重新编译,请考虑使用从
Microsoft.Extensions.Configuration
源或从
appSettings
下载的值来配置跟踪类型和WCF。
您可以在
文档中找到有关.NET Core和.NET Framework之间差异的更多信息。
开始
查看以下简短教程:
从.NET Framework移植到.NET Core
首先,启动
可移植性分析器(可移植性分析器),并在必要时更新代码以确保与.NET Core的100%兼容性。 以下是
使用可移植性分析器的说明。 。 我们建议您在对应用程序进行任何更改之前使用源代码控制或对代码进行备份,以防重构无法按您期望的方式进行,并且您决定返回到原始状态。
当您的应用程序与.NET Core完全兼容时,您就可以准备移植它了。 首先,您可以尝试使用我们创建的工具来帮助您自动将.NET Framework项目转换为.NET Core-
try-convert 。
重要的是要记住,此工具只是通往.NET Core的起点。 另外,这不是受支持的Microsoft产品。 尽管它可以帮助您解决迁移的某些机械问题,但它不能处理所有方案或项目类型。 如果您的解决方案中有该工具拒绝或无法转换的项目,则必须手动传输它们。 不用担心,我们已经准备了很多有关如何执行此操作的课程(在本文结尾)。
尝试转换工具将尝试将旧样式的项目文件传输到新的SDK样式,并在.NET Core中重新配置相应的项目。 对于您的库,我们由您选择平台:.NET Core或.NET Standard。 您可以通过更新
<TargetFramework>
的值在项目文件中指定其中之一。 没有特定于.NET Core依赖关系的库(例如WPF或Windows Forms)可以从.NET Standard的选择中受益:
<TargetFramework>netstandard2.1</TargetFramework>
以便面向许多不同.NET平台的调用者可以使用它们。 另一方面,如果库使用需要.NET Core的函数(例如Windows桌面UI API),则该库应集中在.NET Core上:
<TargetFramework>netcoreapp3.0</TargetFramework>
try-convert是一种全局工具,可以
将其安装在计算机上,然后从CLI调用:
C:\> try-convert -p <path to your project>
或
C:\> try-convert -w <path to your solution>
如前所述,如果您无法使用try-convert工具,则以下是有关如何手动移植应用程序的材料。
录影带该文件
另请参阅:
7个针对开发人员的免费课程