我们正在启动一个跨平台项目,以部署到 Android 和 iOS。显然,很多代码要在两者之间共享,并且一些代码严重依赖于 .NET 框架项,例如 sqlite-net 库。
在 2 个项目之间共享代码的最佳方式 (afaik) 是使用 PCL——这样可以在解决方案中使用来自 iOS 和 Android 项目的共享代码来引用项目,并重新编译和链接所有内容很好的方式。
但是,在 MonoDevelop 中创建的 PCL 是使用 gmcs 编译器编译的,并且在这种情况下无法构建一些外部依赖项(即在这种情况下使用的框架缺少System.Func<T, TResult>
,仅提供System.Func<T1, T2, ..., T9, TResult>
)。MonoTouch 的编译器 (smcs) 能够完美地编译 PCL(通过将 gmcs 二进制替换为 smcs 二进制来证明)。根据我在谷歌搜索后发现的结果,gmcs 使用 2.0 .NET 框架,而 smcs 使用称为 2.1 框架的 smth,它实际上是最近的 .NET 的混合体。
问题来了:在 MonoDevelop 中构建 PCL(作为另一个项目的依赖项)时,是否可以指定使用哪个编译器?