1

Mono 中的 System.Data 是否已扩展为包含额外功能?我试图在 Mono.Data.SqlExpressions 中使用为 Mono 编写的 SQL 解析器,但是当 SqlExpressions 命名空间中的所有类都包含在内时,项目仍然无法编译,因为 System.Data 中的类不匹配。
例如,System.Data.DataColumn 没有定义 PropertyChanged 事件。我需要改用 Mono System.Data 库吗?当 Mono DataColumn 类包含在项目中时,不会发生此编译错误(它引用了 DataCategory 等类,这些类在 .Net 框架中找不到)。

或者,对于如何将 Mono 中的 Sql Parser 移植到 Microsoft 的 .Net 框架的任何帮助将不胜感激。我试图下载源代码并将缺少的库添加到项目中,但这种方法似乎存在缺陷。缺少的依赖项的数量似乎在增加而不是解决问题。

4

1 回答 1

1

Mono 试图成为二进制和 API 与 MS 的实现兼容。这意味着除了一些内部支持方法和类之外,Mono 公开的所有 API 都应与 MS .Net 匹配 101。这是为了避免像人们假设一个方法存在那样的复杂性,因为它在 Mono 中编译,然后它在 MS.Net 上根本不起作用。

当 Mono 贡献者实现新代码和功能时,通常会将其合并到单独的程序集和项目中。顾名思义,Mono.Data 就是这样一个“扩展”,因此您需要包含所有依赖程序集才能构建它是有意义的。如果 Mono.Data.dll 及其依赖项将在 MS.Net 上运行,或者不是问题或检查文档并对其进行测试。

至于你的第二个问题,我不能告诉你细节,但除非代码有特定的指令要在 Windows 上运行,否则很可能需要大量的工作来移植。与任何 API 一样,许多代码不会暴露给公共接口,并且在移植代码时需要解决实现的内部功能。我建议您花一些时间分析代码的工作原理,然后尝试通过尽可能多地删除 Mono 代码上的依赖项来使其在 MS.Net 上运行。最后,如果代码足够兼容,您应该考虑使用编译指令和 #if !MONO pragma 修补 Mono 的源代码,以便为将来的用户省去麻烦。

于 2009-11-12T01:42:26.173 回答