当咱们在使用 Visual Studio 2019 非预览版本开发 Windows Forms App (.NET Core) 应用程序时是不能使用窗体设计器的。即便在窗体文件上右击选择“显示设计器”菜单,仍旧只能看到代码,没法打开窗体设计器。html
根据微软开发者博客的描述,咱们可使用 Visual Studio 2019 预览通道,将 Visual Studio 2019 更新至 16.6 来启用设计器(参见:Updates on .NET Core Windows Forms designer)。windows
在不启用预览通道的状况下,咱们仍然能够经过更改项目文件来让项目支持窗体设计器。app
当咱们新建一个 .NET Core Windows Forms 程序时,咱们的项目文件(*.csproj)一般包含如下内容:框架
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>netcoreapp3.1</TargetFramework> <UseWindowsForms>true</UseWindowsForms> </PropertyGroup> </Project>
TargetFramework
标签标识咱们程序的目标框架是 .netcoreapp3.1
。若是咱们的项目同时能够支持 .NET Framework 那么就能够在 Visual Studio 中使用设计器,可使用 TargetFrameworks
标签来让项目支持多个目标框架:spa
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFrameworks>net472;netcoreapp3.1</TargetFrameworks> <UseWindowsForms>true</UseWindowsForms> </PropertyGroup> </Project>
保存更改后,Visual Studio 可能会提示从新加载。确认从新加载,窗体设计器就可使用了:.net
经过为项目增长 .NET Framework 目标框架来启用设计器设计
作完这一步,咱们的代码会没法经过编译。这是由于项目中使用了一个新的 API :SetHighDpiMode
,可是 .NET Framework 4.7.2 并不支持。能够经过条件编译来限定对 SetHighDpiMode
的调用仅在 .NET Core APP 下生效。当目标框架是 .NET Core 时,生成系统能够识别 NETCOREAPP
处理器符号(感谢 @麦壳饼 的提示)。对 Program.cs 文件中 Main 方法的代码稍做修改便可编译经过:调试
/// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { #if NETCOREAPP Application.SetHighDpiMode(HighDpiMode.SystemAware); #endif Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new FrmMain()); }
点击“调试”按钮的下拉项对目标框架进行切换:code
切换调试项目的目标框架orm
程序运行起来后,效果使人满意:
.NET Core Windows Forms 运行效果