2011-05-11 45 views
2

我目前正在研究一个项目,其源代码应尽可能便携;也就是说,该项目(在C#中,但它不是非常相关)表示应该在Android(使用Mono-Android),iPhone(使用MonoTouch)和WinMobile(使用官方Compact Framework)上执行的应用程序。没有深入细节,相应的MSBuild解决方案由一个独立平台库(至少从源代码的角度来看)组成,它声明各种接口和类,这些接口和类表示每种功能的抽象,而不是各种平台所共有的即UI)。此外,还有一个相应的库(专门针对每个平台)“基础库”;有效的应用程序可执行文件是使用抽象和通用标准库的程序。多平台MSBuild项目文件

在WinMobile和Android上开发并不是一个真正的问题:Mono-Android外接程序可以安装在VS 2010上,所以两个平台都可以使用MS VS来处理。

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

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

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

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

是否有一种方法可以在项目文件中指定项目类型仅在独立选择某个特定配置的情况下存在于我正在使用的环境中?

回答

0

我通过排除在Linux和Windows之间显示为怪异的文件,解决了跨平台开发中无关但非常相似的问题。我有我的项目在源代码控制下,并利用它来保持协同工作。 http://www.aydabtudev.com/2011/05/what-goes-into-source-control-android.html

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

3

一般的做法是这样的;这progressivly建立你的财产,任何参考值的条件已经财产可能有:

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

这将检测VS条件(建筑物时),并省略unkonwn GUID。但我不确定在项目开放时它是否可以工作,这个属性可能只适用于建筑。在Mono上可能会有类似的“高级”财产,你可以改变这种状况。

+2

我知道这已经很旧了,但我想指出,如果使用msbuild构建,这会失败。 'BuildingInsideVisualStudio'只会在从IDE本身构建时触发。这可能会在构建服务器上出现问题,例如直接从命令行运行msbuild。 – julealgon 2014-12-30 20:31:42