Skip to content

WinForms 在64位世界的策略发展 - .NET Blog

Published: at 04:18 PM

WinForms 在64位世界的策略发展 - .NET Blog

引述

32位组件可能会给WinForms开发人员在64位Visual Studio环境中带来挑战,但有解决方案。组件现代化,迁移到.NET 6+,并且有一个新选项可以使用Framework的异步处理设计器,是一种可行的解决方式!

本文翻译自 Klaus Loeffelmann 的博客文章。原文标题为 WinForms in a 64-Bit world - our strategy going forward


2024年2月22日

作为一个依赖创新与成长的社区的一部分,WinForms开发人员常常推动边界以创造新的可能性。我们的开发人员还负责维护使命关键线的业务软件,这些业务软件通常已经开发了十多年。我们重视你的信任以及你用我们的工具创造优秀软件解决方案的热情。你可能已经注意到,Visual Studio 2022从32位切换到64位在某些方面产生了一些复杂性,这些变化正在你的开发旅途中增加了一些难度,我们希望通过指出已经存在的解决方案和我们进一步的计划来阐明这些问题。

拥抱64位:向好的改变

将平台切换至64位远远超过了简单的升级。这是一个重大改进,使Visual Studio在多个方面的工作更出色。最大的好处之一就是可以使用更多的内存。在32位版本中,Visual Studio能使用的内存有限,这常常会导致处理大型项目时性能变慢,甚至出现错误。64位版本移除了这些限制,让Visual Studio能更有效地处理大型项目。

但这不仅关乎获取更多的内存。切换到64位还使Visual Studio能够更好地利用你的计算机的处理器,特别是它的多核心。由于64位应用程序可以同时处理更多的数据,它可以同时并有效地使用更多的核心,从而导致操作更快。当你构建项目时这特别明显。如果你的项目大型,文件多,代码量大,那在64位上的构建操作会显著更快。这意味着你等待构建完成的时间更短,你可以更快地完成你的工作。但这些不是唯一的优点。其他优点包括:

WinForms如何适应?

这些优点也同样适用于WinForms Designer。WinForms应用程序常常反映复杂的业务案例。因此,这些应用程序通常包含数百个Forms和UserControls,它们本身可以变得十分庞大和复杂。所有这些导致了大量的代码需要在Form被编辑时生成。因此,64位转换的最大受益者无疑是WinForms Designer。Designer利用了在64位体系结构中访问更多内存的能力,大大提升了其处理复杂设计任务的性能和能力。

32位遗留组件挑战

虽然如此,我们完全明白这个进步带来了一些关于与32位体系结构绑定并在Windows Forms designer中被用于针对.NET Framework版本最大4.8.1的项目的组件方面的挑战。

从32位转变为64位系统不仅关乎增加效率,它涉及到的是基本的架构层面的改变。这些改变直接影响了我们管理.NET Framework版本和.NET Core应用程序的方式。例如,不可能在64位进程中主机32位独有的组件或者在.NET Framework进程中主机.NET Core类型。然而,这不应当被视作可以避免的做法,而应当被视作是在技术中自然发展和演变的必由之路。

我有哪些选择?

你可以考虑多条途径,每条都有它自己的优点:

如果所有这些选项都不能满足你特殊的需求,那么还有异步处理的WinForms Designer作为最后的选项:

适应新环境:异步处理Designer

为支持.NET Core 3.1及以上版本,我们创建了一个WinForms Designer的异步版本;一个独立的进程可以处理Visual Studio作为一个.NET Framework进程无法执行的任务。这基本上需要我们创建一个全新的体系结构和可扩展性模型来同时处理两种类型的进程。升级到.NET确实有它的挑战,包括运行时的改变以及新的异步Designer的改变。虽然我们确实保持了最重要的设计时间功能的并行性,但有些情况下旧方法不再适应新的技术环境。

异步Designer使我们可以避过在进程设计中的问题,即主机组件与托管Designer,例如,Visual Studio的目标框架不兼容的问题。这是通过启动一个新的Designer进程完成的,它将在WinForms项目设定的精确目标框架版本中运行,从而在管理不同架构的组件方面提供更大的灵活性。

此外,异步制程师也允许我们提供对更高版本的.NET的支持,如.NET 8, 9和更高版本。它通过允许组件利用这些新版.NET的特性来达到这一点,这些特性可能和.NET Framework不兼容。

然而,这也意味着所有的单独组件和他们的控制Designer必须调整以适应不同的进程边界。当你正在使用你自己的WinForms控制库时,存在高度定制的设计时支持通过专门的控制Designer,这些Designer提供定制的CodeDOM序列化,专门的类型编辑器,定制的标记渲染或个性化的Designer动作项目,你需要迁移你的Designer代码以使用WinForms Designer SDK。我们已经向这个方向发展了,以我们的.NET (Core, 5+)的常规控制为例。同样重要的是:我们更大的第三方控制库合作伙伴也提供他们的产品用于.NET版本5, 6和7 – 为.NET 8现代化的版本正在制作中。

重要的是当我们在处理这些问题时,优先考虑的是基于使用情况排序的组件。.NET Core中较少使用的一些组件已经过时,以支援更常用的组件。

用于支持32位组件的.NET Framework应用程序的异步Designer

我们看到有更多的人需要为32位.NET Framework设计WinForms应用程序的支持,这是因为这些应用程序使用了只能在32位进程中工作的部分。这就是我们采取WinForms异步Designer的方法,开始为.NET Framework引入基于此的32位异步Designer。

异步Designer设计为可以生成一个单独的32位进程,这个进程可以主机这些应用程序所需的组件。这样做,它绕过了Visual Studio 64位环境和32位组件间的不兼容性。这个设计允许更顺畅的集成和兼容性,即使系统体系结构有差异。

如果你尝试打开一个WinForms .NET Framework项目,这个项目引用了一个32位组件,Visual Studio会自动弹出一个对话框,询问你是否希望使用32位 .NET Framework异步Designer打开你的项目。

打开包含32-Bit组件引用的WinForms项目时出现的对话框截图

就像它的.NET对等者一样,32位.NET Framework WinForms应用程序的异步Designer旨在提供相同的设计时间体验,保持使用现有甚至是遗留的32位组件的能力。尽管架构上的难度挺大,我们承诺确保切换顺畅且保持你所依赖的功能,同时也提供了未来升级和增强的途径。

我们明白重要的遗留项目可能依赖于32位ActiveX控制和其他遗留组件,这些目前与Visual Studio 2022不兼容,特别是针对那些不针对.NET (Core, 5+)而是针对.NET Framework直到版本4.8.1的项目。在这些情况下,异步Designer对许多用例可能是解决方案。但是要注意,.NET (6+) WinForms异步Designer应被视为首选和最佳实践的前进方式——你将会得到两个世界的优点:在设计时间和运行时间的32位兼容性最新的,最先进的和性能最好的.NET版本。

**It is important to note:**升级过的异步32位.NET FrameworkDesigner将与旧的.NET FrameworkDesigner保持完全的一致性,这是由于跟异步.NET CoreDesigner提到的相同的架构差异。这也意味着高度定制的控制Designer将不会与.NET FrameworkDesigner兼容。如果你使用第三方的定制控制库,你需要查看他们是否提供支持异步_.NET Framework_Designer的版本。

支持遗留组件:我们的承诺和计划

异步Designer是我们将来投入大部分精力的地方。下面是我们今年的路线图规划:

对于Visual Studio 2022版本17.9我们已经发布了一个功能,它可以帮助你轻松地选择.NET Framework项目应该打开为经典的Visual Studio内部Designer还是异步Designer。与经典WinForms内部Designer相比,差异将会是:

前行:合作的努力

从32到64位系统的过渡是一个重要的里程碑,需要一种新的途径,创新的解决方案和耐心。如之前提到的,这不是一个快速bug修复;反而,这是我们需要作为一个社区共同管理的过渡。

我们承诺尽可能使这个过渡对你顺畅。你的反馈极具价值,并帮助我们找出我们需要集中精力的领域。我们有一个路线图,正朝着前进,但完成的时间表依赖于你带给我们注意的独特的挑战。

总的来说,我们了解你面对的复杂性,并且我们想要向你保证我们正在尽力解决这些挑战。请记住,改变常常伴随着一点不适,但它为成长和更好的结果铺买道路。我们要强调你在这个持续过渡中积极参与的重要性。我们正在持续努力改进和微调64位Designer和异步Designer的支持,你的反馈和错误报告就非常重要。如果你在使用WinForms时遇到特定的问题,我们强烈建议你直接在WinForms的GitHub库或通过Visual Studio的反馈功能上报告他们。详尽、具体的问题报告,尤其是包括环境信息、再现步骤、特定的错误信息的报告,非常有助于我们识别并更有效地,更快速地解决问题。你在这个过程中的参与对于成功开发一个更强大、更高效的Visual Studio至关重要,因为32位遗留组件所基于的技术在很多情况下已经有20年甚至更久的历史了。

最后的想法

从32位到64位的过渡过程是复杂的,并充满了挑战。我们承诺为尽可能所有的用户成为这个过渡更顺畅,但我们理解过程中会有困难。

感谢你的支持和承诺,因为我们一同迎接一个更有能力、更多样性的WinForms生态系统,并且像往常一样…

…happy coding!