多平台MSBuild项目文件

时间:2011-05-11 13:16:44

标签: iphone android msbuild project multiplatform

我目前正在开发一个项目,其源代码应尽可能便携;也就是说,项目(在C#中,但它不是很相关)代表应该在Android(使用Mono-Android),iPhone(使用MonoTouch)和WinMobile(使用官方Compact Framework)上执行的应用程序。没有详细说明,相应的MSBuild解决方案包含一个独立平台库(至少从源代码的角度来看),它声明了各种接口和类,这些接口和类代表了各个平台不常见的每个特性的抽象(即UI)。此外,还有一个相应的库,专门为(每个平台)“基础库”;有效的应用程序可执行文件是一个使用抽象和通用标准库的程序。

在WinMobile和Android上开发并不是一个真正的问题:可以在VS 2010上安装Mono-Android加载项,因此可以使用MS VS处理这两个平台。

最初解决方案是在VS中创建的,因此初始配置和相关项目(Android和WinMobile)会自动生成。

之后我在MonoDevelop中导入了Mac下的解决方案(MonoTouch正式支持的唯一平台),我为iPhone库创建了项目;切换配置以生成程序集(iPhoneSimulator)由于缺少项目类型配置,无法编译“基础库”;具体而言,MonoTouch用于<ProjectTypeGuids>的GUID为{E613F3A2-FE9C-494F-B74E-F63BCB86FEA6};添加此GUID我现在可以在MonoDevelop中编译“基础库”。

当我尝试在VS中重新导入解决方案时出现问题:由于没有Windows版本的MonoTouch,VS无法找到指定项目类型的加载项,并且项目未加载。

查看MSBuild项目文件的规范,似乎在VS的项目/解决方案编辑器中有大量的选项无法设置或修改;但格式非常复杂,现在我正在请求你的帮助!

有没有办法在项目文件中指定只有在独立选择特定配置时我才会使用项目类型?

2 个答案:

答案 0 :(得分:3)

一般方法是这样的;一个条件,逐步建立您的财产,引用该财产可能具有的任何价值:

<ProjectTypeGuids
   Condition="'$(BuildingInsideVisualStudio)' != 'true'"
   >;{E613F3A2-FE9C-494F-B74E-F63BCB86FEA6}"</ProjectTypeGuids>
<ProjectTypeGuids>{OTHER-GUIDS-HERE}$(ProjectTypeGuids)</ProjectTypeGuids>

这将检测VS条件(构建时)并省略unkonwn guid。我不确定它是否会在项目打开时起作用,此属性可能仅适用于建筑物。在Mono上可能有一个类似的“sentinal”属性,你可以改变这种情况。

答案 1 :(得分:0)

我解决了一个不相关但非常相似的跨平台开发问题,它排除了在Linux和Windows之间传播时出现胡思乱想的文件。我将我的项目置于源代码管理之下,并利用它来保持协同工作。 http://www.aydabtudev.com/2011/05/what-goes-into-source-control-android.html

对于您的问题,这不是一比一,但它可能会为您提供有关如何解决问题的线索/想法。