目录

解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法



以下方法来自于微软github开源项目WinForms:

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

dotnet/winforms - Using the Classic WinForms Designer in WinForms Core, 请放心使用 .

目前.net core下的 Windows Forms的可视化设计器(Designer)尚不可用,后续的Visual Studio 2019 Update才会支持该部分的功能。不过目前我们想在vs2019中使用 Designer,有一种临时解决方法。

可以使用Visual Studio来处理链接文件(Link files)的功能,并将其WinForms Designer用于Classic Framework (即.net Framework的Win Forms项目)。

具体的解决方法是在同一个 Solution下创建两个项目:

  • 用于设计WinForms应用程序的.NET Framework应用程序(.net Framework 项目)
  • 用于运行WinForms应用程序的.NET Core应用程序(.net core项目)

而两个应用程序(.net core项目和相应.net Framework 项目)都将引用相同的文件。
此篇文章有关于WPF的姊妹篇解决VS2019中.net core WPF 暂时无法使用 Designer 的临时方法 ,但对WPF而言实现起来比WinForms简单很多。核心思想同样是借壳~

在该方法中,只要添加新的Win Form或新的UserControl,就需要在Classic Framework WinForms项目(.net Framework的Win Forms项目)中重新设置Form文件的嵌套层级关系,推荐使用Mad Kristensen的文件嵌套扩展来完成这件事,而不是使用文本编辑器来修补项目文件(.csproj文件),建议事先安装好该vs插件。

完整步骤:

安装 vs 2019 professional/enterprise版本

先安装 vs 2019 professional/enterprise版本,安装好.net core 3.0 SDK,此时试着创建一个.net core下的 win forms 应用,

解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 随笔 第1张

设置好相关项目名和存放路径后,会弹出:

解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 随笔 第2张
下一步骤,勾选.NET core下的"Use preview SDK"会解决这个问题。

当然也可使用命令行/Powershell来创建。

  • 打开命令行/Powershell
  • 使用cd命令,切换到自己平时存vs项目的路径(比如我切换到D:\Coding)
  • 输入命令dotnet new winform --name "CoreFormDemo"

解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 随笔 第3张

在vs的设置里,勾选.NET core下的"Use preview SDK"

解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 随笔 第4张

设置完,重启vs才能生效。
此时用vs打开刚才的Solution即可。

使用vs自带的模板,选择其中的 .net core forms 创建Project, 取名为"CoreHelloForm"

解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 随笔 第5张

解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 随笔 第6张

此时的文件目录为:

解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 随笔 第7张

在刚创建的Solution中使用vs自带的模板,选择其中的.net framework forms添加新的project,取名为"CoreHelloForm.Designer"

解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 随笔 第8张

解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 随笔 第9张

解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 随笔 第10张

此时Solution中的文件目录为:

解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 随笔 第11张

将.net core form下的Form1 重命名为 MainForm

解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 随笔 第12张

解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 随笔 第13张

此时,选中 .net core form项目,右键选择 “Set as start up project”,按F5运行项目,可看到窗体:

解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 随笔 第14张

然后点窗体右上角的x关闭按钮,停止运行.

测试从命令行是否能正常 build .net core项目

右键 .net core form项目,点击"Open Folder in File Explorer",

解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 随笔 第15张

解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 随笔 第16张

删除此处的bin 文件夹

在上方地址栏输入cmd 进入命令行:

解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 随笔 第17张

输入dotnet --version,看是否能看到具体.net core版本,如果没问题,继续下面的步骤。

输入dotnet build

解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 随笔 第18张

此时,回到文件目录D:\Coding\csProj\CoreHelloForm\CoreHelloForm\bin\Debug\netcoreapp3.0,双击其中的exe文件,窗体能正常打开。

解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 随笔 第19张

删除项目CoreHelloForm.Designer中所有Form1相关的文件

接着选中.net framework项目CoreHelloForm.Designer下的Form1,右键点击"Delete",

解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 随笔 第20张

会出现下面这个警告框,点OK

在项目`CoreHelloForm.Designer中以"As Link"的方式引用.net core form项目下的MainForm相关文件

选中项目CoreHelloForm.Designer,右键Add,选"Existing Item"

解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 随笔 第21张

打开文件选择框之后,选择.net core项目CoreHelloForm下的下图中高亮的3个文件.

解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 随笔 第22张

点击Add As Link

从Extension market下载并安装扩展 File Nesting

下载地址: File Nesting for VS
下载到的文件是File_Nesting_v2.6.85.vsix, 关闭vs,双击,勾选上相应版本的vs安装即可~
解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 随笔 第23张

使用 File Nesting来修改 Link 的 MainForm相关文件的层次关系.

先选中文件MainForm.Designer.csMainForm.resx,然后右键点击 "File Nesting" -> "Auto-nest selected items"

解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 随笔 第24张

再右键点击 "File Nesting" -> "Nest item",选择 MainForm

解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 随笔 第25张

OK继续.

再进行一次重命名

.Designer项目下的Program.cs中的Form1改为MainForm.

解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 随笔 第26张

重设启动项项目

选中项目CoreHelloForm.Designer,右键 Rebuild, 选中.net framework项目CoreHelloForm.Designer,右键选择 “Set as start up project”.

关闭 Solution中 项目CoreHelloForm.Designer中MainForm的干扰文件

此时,如果试着双击项目CoreHelloForm.Designer中的MainForm.cs,会弹出如下警告。

解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 随笔 第27张

那是因为项目CoreHelloForm.Designer中的MainForm.cs 所Link 的与MainForm相关的文件已经在 项目CoreHelloForm 中 打开。

我们将已打开的文件中与项目CoreHelloForm.Designer中Form相关的文件都关闭掉,比如:

解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 随笔 第28张

试用 Designer

现在,再双击项目CoreHelloForm.Designer中的MainForm.cs,就能看到 Designer 了。

解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 随笔 第29张

此时,可以进行可视化编辑了。

比如,我做了如下几处修改:

  • 改掉 Form的 Title

解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 随笔 第30张

  • 改掉文本框的内容.

解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 随笔 第31张

  • 改掉窗体的图标(icon)

解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 随笔 第32张

F5,运行的效果图为:

解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 随笔 第33张

项目代码已推到github,欢迎Forkstar.
传送门: .netCore-WinForms_Designer , 如果觉得自己配置起来麻烦,也可以 clone 下来自己体验一把喔~


查看本人最近其他原创作品请移步:


参考资料

WinForms Core App - A workaround invoking the Classic Framework Designer.

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄