9月,我们发布了.NET Core支持,用于构建Windows桌面应用程序,包括WPF和Windows Forms。 从那时起,我们很高兴看到如此多的开发人员分享了将桌面应用程序(和控件库)迁移到.NET Core的故事。 我们经常听到有关.NET Windows桌面开发人员使用WPF和Windows Forms支持其业务的故事,尤其是在桌面功能强大的情况下,包括:
- UI密集数据形式(FOD)应用程序
- 响应式低延迟UI
- 需要脱机运行/断开连接的应用程序
- 依赖于自定义设备驱动程序的应用程序
这只是.NET Core上Windows应用程序开发的开始。 继续阅读以了解有关.NET Core对构建Windows应用程序的好处的更多信息。

为什么在.NET Core上使用Windows桌面?
.NET Core(以及将来在.NET Core之上构建的.NET 5)将是.NET的未来。 我们承诺将在未来几年内支持.NET Framework,但是它将不会收到任何新功能,这些新功能只会添加到.NET Core(最终是.NET 5)中。 为了改进Windows桌面堆栈,并使.NET桌面开发人员能够从将来的所有更新中受益,我们将Windows Forms和WPF引入了.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 Framework相比,.NET Core具有许多性能优化。 当您考虑最初为Web和服务器工作负载构建的.NET Core的历史时,它有助于了解您的应用程序是否可能从运行时优化中看到明显的好处。 具体来说,在很大程度上依赖于文件I / O,网络和数据库操作的桌面应用程序可能会看到这些方案的性能提高。 您可能不会注意到很多变化的某些方面是UI渲染性能或应用程序启动性能。
通过在发布配置文件中设置属性
<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和Windows Forms的.NET Framework和.NET Core版本之间有太大区别。 我们的工作之一是在桌面区域提供这些平台之间的功能对等,并在将来增强.NET Core的体验。 .NET Core完全支持WPF应用程序,在我们进行较小的更新和改进时,您可以使用它。 对于Windows窗体,运行时部分已完全移植到.NET Core,并且团队正在Windows窗体设计器上工作。 我们计划在2020年第四季度之前准备就绪,现在您可以在
Visual Studio 16.4 Preview 3或更高版本中签出设计器的Preview版本。 不要忘记在“工具”->“选项”->“预览功能”->“。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工具对您不起作用,那么这里是有关如何手动移植应用程序的材料。
影片文献资料