我们正在开始一个跨平台的项目部署到Android和iOS。 显然,大量的代码是要在两者之间共享,以及一些代码在很大程度上依赖于.NET框架项,如源码网库做。
最好的办法(据我所知)分享2个项目之间的代码是使用PCL - 这样就可以与溶液中的iOS和Android的项目共享的代码来引用该项目,并拥有一切重新编译和链接不错的方式。
然而,在MonoDevelop中创建的PCL被编译的GMC编译器和一些外部依赖性的失败要建在这种情况下(即,在此情况下使用的框架中没有System.Func<T, TResult>
仅提供System.Func<T1, T2, ..., T9, TResult>
MonoTouch中的编译器(校董会),反过来,是能完美编译PCL(用二进制的SMC替代的GMC二进制证明)。 从我有点谷歌上搜索后发现,肾小球系膜使用.NET Framework 2.0的,同时校董会使用不便叫2.1框架,这实际上是最近.NETs的板缺混合物。
这里谈到的问题是:是否有可能指定MonoDevelop中同时建设PCL要使用的编译器(如另一项目的依赖)?
单尚没有实际PCL库的实现。 现在,它有一个虚拟Microsoft.Portable.CSharp.targets文件 ,与其覆盖的框架和目标,以建立对MonoTouch的,单库Android或.NET 4.0,按照这个顺序,根据已安装什么。
它看起来像有缺陷在使用MonoTouch的框架代码路径 - 这是使用默认的共同目标,Microsoft.CSharp.targets,无需重写编译器使用C#编译器的具体MonoTouch的版本。 这是必要的,因为Mono的C#编译器是目前框架特有的(虽然这是固定在单声道2.12,这是在阿尔法)。
您可以通过编辑文件来解决这个/Library/Frameworks/Mono.framework/Versions/Current/lib/mono/xbuild/Microsoft/Portable/v4.0/Microsoft.Portable.CSharp.targets
,找到的PropertyGroup是套
<TargetFrameworkIdentifier>MonoTouch</TargetFrameworkIdentifier>
而它,添加行:
<CscToolExe>smcs</CscToolExe>
<CscToolPath>/Developer/MonoTouch/usr/bin</CscToolPath>
我知道这是一个老问题,但现在看来,加入便携式类库(PCL)支持3.0.x版为单声道,请参阅发行说明有关详细信息,尤其是版本3.0.8 :
加入xbuild,单声道的MSBuild的实现PCL支持。