Mono中的System.Data是否已扩展为包含额外功能? 我试图在Mono.Data.SqlExpressions中使用为Mono编写的SQL Parser,但是当包含SqlExpressions命名空间中的所有类时,项目仍然无法编译,因为System.Data中的类不匹配。登记/> 例如,System.Data.DataColumn未定义PropertyChanged事件。 我需要使用Mono System.Data库吗? 当Mono DataColumn类包含在项目中时,不会发生此编译错误(它引用了诸如DataCategory之类的类,这些类在.Net框架中找不到)。
或者,任何有关如何将Mono中的Sql Parser移植到Microsoft的.Net框架的帮助将不胜感激。我试图下载源代码并将缺少的库添加到项目中,但这种方法似乎存在缺陷。丢失依赖项的数量似乎增加而不是解决问题。
答案 0 :(得分:1)
Mono试图将二进制和API与MS的实现兼容。这意味着除了一些内部支持方法和类之外,Mono公开的所有API都应该与MS .Net相匹配101。这是为了避免复杂性,就像人们假设一个方法存在,因为它在Mono中编译然后它在MS.Net上不起作用。
当新的代码和功能由Mono贡献者实现时,它通常被合并到一个单独的程序集和项目中。 Mono.Data顾名思义就是这样一个“扩展”,所以你需要包含所有依赖程序集才能构建它。如果Mono.Data.dll及其deps将在MS.Net上运行或不运行或检查文档并对其进行测试。
至于你的第二个问题,我不能告诉你细节,但除非代码具有在Windows上运行的特定指令,否则很可能需要大量工作才能移植。与任何API一样,许多代码不会暴露给公共接口,并且在移植代码时需要解决实现的内部功能。我建议你花点时间分析一下代码是如何工作的,然后尝试通过在Mono代码上删除尽可能多的代码来使它在MS.Net上运行。最后,如果代码足够兼容,你应该考虑使用编译说明和#if!MONO pragma修补Mono的源代码来为将来的用户节省麻烦。