Windows Forms和WPF的共存

3
我需要使一个应用程序兼容所有的.NET Framework:2、3、3.5和4。
此外,我想开发一个应用程序,当在只安装了Framework 2的PC上运行时,GUI使用Windows Forms制作,但如果PC使用Framework 3或更高版本,则GUI使用WPF制作。
我使用.NET 2和Windows Forms开发了一个应用程序。 我测试了这个应用程序,使用了.NET 3、4和3.5,它能正常工作。
最近,我使用WPF更新了GUI,这些更改很简单,因为我使用数据绑定范例来开发界面。 这个选择让我可以轻松地从Windows Forms切换到WPF。
我通过使用这个指南http://msdn.microsoft.com/it-it/library/w671swch%28v=VS.100%29.aspx成功解决了创建一个单一应用程序(适用于Windows Forms)以在任何框架下运行的问题。现在,我想要确保如果PC安装了.NET 3.5或更高版本,则使用WPF制作的GUI来运行应用程序。我尝试遵循一些指南,例如:http://msdn.microsoft.com/it-it/library/433ysdt1.aspx,但是没有成功。我对如何继续感到非常困惑。
应用程序不应该在电脑上安装任何东西,只需使用现有的内容。
提前感谢, Talao。

哎呀,这些要求相当繁琐... - Paddy
根据您的更新,发帖时提供一些您尝试过的内容和具体问题可能会更有价值。您最初的问题非常泛泛;现在它似乎非常具体,但缺乏我们需要提供答案的细节。 - Dan Puzey
鉴于最新的更新,我不得不同意。将其构建为 .net 2.0 或更高版本的应用程序。并且建立一个独立的 .net 4.0 或更高版本的应用程序。为了在单个应用程序中支持两者所需的开发可能并不值得。虽然使用 MVC/MVP 可以做到这一点,但我同意 WinForms 和 WPF 是不同的,因此视图最终将包含应该被测试的代码。 - JonWillis
3个回答

3
如果您的应用程序需要兼容所有这些版本,那么您真正想表达的是:它需要成为一个.NET 2应用程序。否则,.NET 3(或更高版本)应用程序将无法正常工作,因为它在启动时找不到所需的程序集。
话虽如此,由于.NET 3是建立在.NET 2之上的,我相信您可以找到一种方法来动态加载.NET 3程序集(如果框架可用的话)。但这并不美观。
即使您成功了,WinForms和WPF下的应用程序基本原理也非常不同,因此您会发现自己需要重写大量代码。仅仅替换MVC应用程序的视图可能是不够的(除非您愿意编写一些非常复杂的视图...)。
我的建议是要么编写两个应用程序,要么最好在.NET 4中编写,并将框架作为安装程序的一部分加入。假设这是一个商业应用程序,那么要么这样做,要么坚持使用WinForms-我无法想象开发成本会有所价值。

不幸的是,该应用程序不应在计算机上安装任何内容,只能使用已有的东西。 - McTALAO

1
我能想到的最简单的解决方案是使用MVC/MVP模式开发GUI。其中视图可以是Winform表单或WPF表单。然后,您可以将每个视图分别开发为WinForm表单和WPF表单。
在应用程序启动时,调用Environment.Version以获取框架版本。根据此版本,您可以告诉应用程序使用WPF或Winform视图进行加载。如果大于或等于3.5框架,则使用WPF,否则使用WinForm视图。
另一种方法是使用兼容控件,在其中可以将WinForms放置在WPF控件中,但这样做会失去WPF的强大功能,因此这仅适用于将少量WinForm控件引入大多数WPF应用程序的情况。

尽管如此,除非您正在使用WPF来利用其图形美学等WPF功能,否则我真的看不到这样做的任何好处。其中一个好处是使用MVVM进行数据绑定,而MVC / MVP模式则没有这个功能。这也意味着在创建视图方面工作量增加了一倍,因为至少业务逻辑是分离的,设计视图应该是一个拖放练习。 - JonWillis
我想指出的是,这也意味着您不能在业务逻辑中使用任何在.NET 2.0中不存在的语言功能... - Paddy
非常正确!如果你想支持更多的 .net 框架版本,你的限制取决于最低版本号。除非你像视图那样为每个版本编写代码,否则你需要特殊情况。 - JonWillis
我使用.NET 2和Windows Forms开发了一个应用程序。我已经测试过这个应用程序,它可以在.NET 3、4和3.5上正常运行。 - McTALAO
我最近使用WPF更新了GUI,这些更改很简单,因为我使用数据绑定范例开发了界面。这个选择让我轻松地从Windows Forms转换到WPF。 - McTALAO

0

你有没有考虑创建多个应用程序,每个用户界面一个?如果你将业务逻辑和用户界面分开,那么这应该不是什么大问题。

然后安装程序会分析目标系统,并确定要安装哪个可执行文件,Winforms还是WPF。


理想情况下,应用程序应准备好转移到WPF。 安装应用程序后,用户可以决定安装框架3.5或更高版本,在这种情况下,应用程序应该进入使用WPF制作的GUI。 - McTALAO

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接