使用Visual Studio针对各个平台
本文关键字:平台 Visual Studio 使用 | 更新日期: 2023-09-27 18:26:18
我正在编写一个同时适用于.NET和Mono的应用程序。然而,它的组件只能用于其中一个或另一个。例如,应用程序的模块化部分使用了WPF,这在Mono中是不可用的(它甚至不会构建!!)。该应用程序的另一部分在libpango上使用PInvoke,而libpango通常只在Unix上可用。
是否可以使用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 ------|
这样,您需要对每个平台进行不同的打包,但核心程序集/程序集可以是相同的。