我希望将代码的某些基于反射的部分替换为使用动态运行时编译性能更好的部分。环顾四周,我发现Mono和Microsoft都有单独的Compiler-as-a-Service解决方案:Mono.CSharp
和Microsoft.CSharp
。
冒着提出基于观点的问题的风险,我想知道这两者之间如何比较?
据我从一个非常肤浅的初步调查可以看出,它们通常都提供CAAS功能。我能够使用Microsoft.CSharp编译“ Hello World”类并执行它。而且,尽管我还没有对Mono进行相同的操作,但我假设它可以完成相同的操作。
是否有人对这两者有任何经验,可以对此问题发表评论?
编辑:我不是在问Mono的C#和Microsoft的C#的比较-我们已经熟悉并使用了两者。问题特别是关于两个CAAS(即服务即编译)解决方案。
CAAS仍然不是.NET运行时的标准部分,也就是说,还没有System.Compile
名称空间。这两种解决方案Mono.CSharp
,并Microsoft.CSharp
是C#独立非标CAAS解决方案。它们的界面非常不同,因此是个问题。
现在的Microsoft.CSharp(.net 4.5)是C#编译器使用的API,用于为C#动态表达式发出绑定。因此,它是C#编译器,但是非常有限。.NET和Mono都实现了相同的API(dll),因此您可以在.NET上编译并在Mono上运行,反之亦然。
Mono.CSharp是Mono C#编译器的评估器样式API。它允许您编译任何C#类似文本的代码(表达式,语句,类型声明等)并执行它。它严重依赖System.Reflection和System.Reflection.Emit。
这些都与CodeDom没有任何关系。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句