WinForms:泛型窗体在 .NET 7 的设计器中不再打开

WinForms: Generic forms don't open anymore in designer in .NET 7

提问人:IngoB 提问时间:9/14/2023 最后编辑:IngoB 更新时间:9/14/2023 访问量:75

问:

为了确保它与 .NET 7 (.NET Core) 相关,我创建了一个具有 .NET 4.7.2 的项目,其中包含通用基本形式和派生形式。两者都可以打开并正确显示。仅在 .NET 7 中,它不再起作用。当尝试打开基本表单时,我得到

无法显示此文件的设计器,因为无法设计其中的任何类。

当尝试打开派生窗体时,我得到

无法创建 WinFormsApp2.Form1'1[TEntity] 的实例,因为 Type.ContainsGenericParameters 为 true。

为什么只是在 .NET Core 中?

我发现了一些关于“UseLegacyPathHandling”的东西,我将其添加到 C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\devenv.exe.config:

<AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false" />

但这无济于事。

WinForms 泛型 .net-core 基类

评论

2赞 Dai 9/14/2023
老实说,我很惊讶通用子类在设计器中曾经工作过。无论如何,一个可能的解决方法是使用封闭的泛型类型进行子类化,例如 - 然后设计器应该工作 - 也就是说,考虑到 WinForms 工具和基础结构的其余部分如何工作,通用窗体类似乎是一个坏主意。FormWinFormsApp2.Form1<TEntity>class DesignerFormWorkaround : Form1<SomeConcreteEntityHere>
0赞 IngoB 9/14/2023
@Dai 是的,确实如此。我在 .NET Framework 中花了相当多的时间,但现在由于我们不得不切换到 .NET,它看起来像是倒退了一步。:|
0赞 Dai 9/14/2023
你能把你的测试代码上传到 github 或其他东西吗?我也非常想看看你的 4.7.2 项目。
0赞 IngoB 9/14/2023
@Dai github.com/IngoBleile/WinFormsGenericBaseForm

答: 暂无答案