2

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

在 WinMobile 和 Android 上开发不是问题:在 VS 2010 上可以安装 Mono-Android 插件,因此这两个平台都可以用 MS VS 处理。

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

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

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

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

有没有办法在项目文件中指定项目类型仅在我使用的环境独立选择特定配置时才存在?

4

2 回答 2

3

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

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

这将检测 VS 条件(在构建时)并省略 unkonwn guid。但是我不确定它是否会在项目打开时起作用,这个属性可能只适用于建筑。在 Mono 上构建可能有类似的“哨兵”属性,您可以反转条件。

于 2011-05-11T14:08:37.943 回答
0

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

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

于 2011-05-11T13:38:48.830 回答