我正在寻找Script#,JSIL和SharpKit作为用于将C#编译为Javascript的工具,因此我可以在Visual Studio中使用C#对AJAX的客户端功能进行编程。
每个JSIL,Script#和SharpKit的优缺点是什么?
我的项目是使用 Razor 引擎和C#的MVC4项目(如果有关系的话)。
最佳答案
如果您希望直接与MVC项目集成,那么Script#或SharpKit之类的东西可能是您最好的选择-我知道Script#内置了一些东西可以简化这种集成,因此我会从那里开始。
如果您确实想尝试使用JSIL,它可能具有所需的核心功能,但是您可能不需要的东西(如Visual Studio集成,自动部署等)就不存在。目前,它主要针对应用程序的交叉编译,因此它做得很好,但在其他用例中却做得不好。
我将尝试总结为什么您可能想在其他替代方案中考虑使用JSIL的原因-由于我没有使用过这些替代方案,因此我无法真正深入地评论这些替代方案的优缺点:
JSIL对C#4中可用的功能提供了广泛的支持。值得注意的(包括因为其他工具不支持它们,或者它们很复杂)包括:
dynamic,yield,Structs,ref / out,Delegates,Generics,Nullables,Interfaces和Enums。
当然,上面的某些功能没有完全的支持-要想知道绝对可行的功能,可以look at the test cases-每个都是一个小的自包含.cs文件,该文件经过测试以确保JSIL和本地C#产生相同的输出。
获得广泛支持的原因是,我的目标是使JSIL使您能够将完全未经修改的C#应用程序转换为可工作的JS。对于JSIL网站上的所有演示,都是如此,我在机翼上有一些即将完成的大型真实游戏移植,这也是事实。
另一个原因是,JSIL使您的C#和JavaScript交谈相对简单。
您所有的C#类型和方法都通过尽可能与JavaScript友好的接口(interface)公开。 JS版本具有基本的重载解析和分派(dispatch)功能,因此在大多数情况下,可以从脚本代码中调用本地C#接口(interface),就像它们是本地JS一样。除非您愿意,否则您无需采取任何步骤来专门标记要公开给JS的方法,也不必为其指定特殊名称或类似名称。
当您想从C#调用JS时,可以采用以下几种方法:
JSIL积极使用类型信息以及您提供的元数据来尝试并安全地优化为您生成的JavaScript。在某些情况下,它可以产生比您手工编写的更好的等效JavaScript-当前适用的主要方面是使用结构的代码,但在其他情况下也可以使用。
例如,in this code snippet,JSIL能够静态确定,尽管代码隐含了许多结构副本,但实际上并不需要任何副本来使代码正确运行。 The resulting JavaScript最终没有任何不必要的副本,因此它的运行速度比如果您天真地转换原始C#的语义所得到的副本要快得多。这是编写基于天真的基于结构的东西(到处都是Vector2s)和使用completely nuts with named return value optimization by hand(即as I've described in the past, is pretty error-prone)之间的一个很好的中间立场。
好吧,现在有一些缺点。不要认为此列表是详尽无遗的:
希望此信息对您有所帮助!感谢您的关注。
关于c# - JSIL与Script#与SharpKit,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11547471/