使用Visual Studio针对各个平台

本文关键字:平台 Visual Studio 使用 | 更新日期: 2023-09-27 18:26:18

我正在编写一个同时适用于.NET和Mono的应用程序。然而,它的组件只能用于其中一个或另一个。例如,应用程序的模块化部分使用了WPF,这在Mono中是不可用的(它甚至不会构建!!)。该应用程序的另一部分在libpango上使用PInvoke,而libpango通常只在Unix上可用。

是否可以使用Visual Studio针对每个平台使用不同的构建参数?

目前,模块化部件不在它们自己的项目文件中,但我可以很容易地将它们移到.

使用Visual Studio针对各个平台

#define/#if块是实现这一点的一种方法。还有一个条件属性。您可能还需要查看MSBuild目标。

您可能还需要考虑您的类设计,以及是否可以共享共享接口,以使更多的提供者或"插件"模型能够支持不同的平台。微软开发了一个可移植库项目类型,可能会对此有所帮助。

条件编译会使代码难以理解和维护。就我个人而言,我反对。

我的建议是,你可以利用良好的设计模式来隔离特定于平台的位,

http://codebetter.com/patricksmacchia/2011/11/07/real-world-feedback-on-a-net-to-mono-migration/

JavaDepend是一个Windows窗体项目,因此它的移植经验可能会对您有所帮助。

WinForms executable (.exe) -> Platform adapter (.dll) -> Windows (.Windows.dll)
                                                     |
                                                     --> Other platforms (.Unix.dll)

通过这种方式,您可以始终将整个解决方案编译在一起,并将它们打包在一起。在运行时,适配器可以在平台检测后加载正确的平台程序集。

对于您的情况,也许您可以将WPF用于Windows,然后您必须将WPF位与业务逻辑代码隔离,然后再次为其他平台编写UI(GTK#用于Linux,MonoMac用于OS X)。这种方法可以可视化为

WinForms/WPF executable (.exe) -> Platform independent biz-logic code (.dll)
                                  ^  ^
MonoMac executable             ---|  |
                                     |
GTK'# executable               ------|

这样,您需要对每个平台进行不同的打包,但核心程序集/程序集可以是相同的。