Ant*_*ton 10 monodevelop gmcs portable-class-library
我们正在启动一个跨平台项目,以部署到Android和iOS.显然,很多代码都要在两者之间共享,而一些代码在很大程度上依赖于.NET框架项,就像sqlite-net库那样.
在两个项目之间共享代码的最佳方式(afaik)是使用PCL - 这样就可以在解决方案中使用来自iOS和Android项目的共享代码来引用项目,并将所有内容重新编译并链接到一个很好的方式.
但是,使用gmcs编译器编译在MonoDevelop中创建的PCL,并且在这种情况下无法构建一些外部依赖项(即,在这种情况下使用的框架缺乏System.Func<T, TResult>,仅提供System.Func<T1, T2, ..., T9, TResult>).反过来,MonoTouch的编译器(smcs)能够完美地编译PCL(通过用smcs二进制替换gmcs二进制文件来证明).从我在谷歌搜索后发现的,gmcs使用2.0 .NET框架,而smcs使用名为2.1框架的smth,实际上是更新的.NET的混合体.
这里有一个问题:在MonoDevelop中构建PCL(作为另一个项目的依赖项)时,是否可以指定使用哪个编译器?
Mik*_*son 16
Mono尚未实现实际的PCL库.目前,它有一个虚拟的Microsoft.Portable.CSharp.targets文件,它改为覆盖框架和目标,根据安装的顺序,依次按照MonoTouch,Mono for Android或.NET 4.0构建库.
看起来代码路径中存在使用MonoTouch框架的错误 - 它使用默认的公共目标Microsoft.CSharp.targets,而不会覆盖编译器以使用特定于MonoTouch的C#编译器版本.这是必要的,因为Mono的C#编译器目前是特定于框架的(虽然这在Mono 2.12中是修复的,它是alpha版本).
您可以通过编辑文件/Library/Frameworks/Mono.framework/Versions/Current/lib/mono/xbuild/Microsoft/Portable/v4.0/Microsoft.Portable.CSharp.targets,找到设置的PropertyGroup 来解决此问题
<TargetFrameworkIdentifier>MonoTouch</TargetFrameworkIdentifier>
Run Code Online (Sandbox Code Playgroud)
并且,添加以下行:
<CscToolExe>smcs</CscToolExe>
<CscToolPath>/Developer/MonoTouch/usr/bin</CscToolPath>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4492 次 |
| 最近记录: |