【问题标题】:MonoDevelop: is it possible to switch PCL's compiler?MonoDevelop:是否可以切换 PCL 的编译器?
【发布时间】:2012-08-20 16:14:28
【问题描述】:

我们正在启动一个跨平台项目,以部署到 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(作为另一个项目的依赖项)时,是否可以指定使用哪个编译器?

【问题讨论】:

    标签: monodevelop portable-class-library gmcs


    【解决方案1】:

    Mono 还没有实际 PCL 库的实现。目前,它有 a dummy Microsoft.Portable.CSharp.targets file,它会覆盖框架和目标,以针对 MonoTouch、Android 的 Mono 或 .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>
    

    然后,添加以下行:

    <CscToolExe>smcs</CscToolExe>
    <CscToolPath>/Developer/MonoTouch/usr/bin</CscToolPath>
    

    【讨论】:

    • 顺便问一下,PCL 的计划是什么?我确实明白目前这只是一个尝试,但在您需要在 iOS 和 Android 应用程序之间共享一些代码的情况下,它非常有用。我的意思是您可以参考 PCL 的项目,它将构建在您目前正在编译的平台上。据我了解,一旦“真正的”PCL 出现在 Mono 中,这将被删除,并且每个 PCL 都将使用“标准”编译器构建,该编译器可能缺少 MonoTouch/MonoForAndroid 中存在的某些功能/库/任何内容。有没有类似依赖项目的计划(希望我的意思很清楚)?
    • 很多计划/想法 - 例如。真正的 PCL 支持、具有 MfA/MT 子集的新 PCL 项目、项目链接器等 - 但还没有具体内容。
    • 谢谢你——我认为这真的真的对我在bugzilla.xamarin.com/show_bug.cgi?id=5329 和bugzilla.xamarin.com/show_bug.cgi?id=5329 及其他地方苦苦挣扎的错误有帮助......正如安东所说——你是一个fckng英雄:)
    • 这里是固定的 Microsoft.Portable.CSharp.targets 文件的链接:files.xamarin.com/~jeff/Microsoft.Portable.CSharp.targets
    【解决方案2】:

    我知道这是一个老问题,但似乎在 3.0.x 版本中向 Mono 添加了可移植类库 (PCL) 支持,有关详细信息,请参阅Release Notes,尤其是版本3.0.8:

    为 xbuild(mono 的 MSBuild 实现)添加了 PCL 支持。

    【讨论】:

      猜你喜欢
      • 2014-07-20
      • 1970-01-01
      • 2015-09-04
      • 1970-01-01
      • 2012-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多