繁体   English   中英

C#与其他语言之间的互操作

[英]Interop between C# and other Languages

我有一个用C#编写的系统,该系统旨在提供一个dll,其中包含一个实现特定接口的类,然后实例化该类并调用某些接口方法并使用响应。

背景是建立一个AI竞赛,人们将AI提交为C#dll。 一切都完美。 好极了!


现在,我想以相同的方式开始支持其他语言。

从根本上讲,用户应上传一个文件(以及有关哪种文件的元数据),然后我将相应地调用该文件的内容。

对于C#,这是“上载dll”并“使用C# System.Reflection实例化它以获取实现该接口的C#对象,然后仅调用相关方法”。

我想知道我还可以支持哪些其他语言? 我可以与可以编译成.exe并通过命令行进行交互的任何内容进行交互,也可以设置基于Web API的交互。

但是,对于那些更类似于实例化对象并直接与该对象进行交互的事情,有什么选择呢?

  • 看来Java可以通过IKVM做到这一点
  • 如果我有一个包含JS代码的文本文件或文件zip,那么我可以在C#环境中调用它吗? (请注意,这是在服务器上运行的-它不是网页,因此我不能轻易地将该JS注入网页中)
  • 斯卡拉? (请注意,除了它是一种功能语言之外,我对Scala一无所知)
  • NodeJS? (再次,我所知道的是Node是服务器端JavaScript)
  • 其他?

我很高兴的答案是一个链接到特定语言已经解决了这个问题,其他的做题-尽管我希望你能确保它解决它在我的特定情况下,用户上传文件(可能是zip?)和我直接在服务器端C#环境中调用它。

找到在CLR内运行的语言绝对是这里的最佳方法吗? 它们都与C#交互的方式并不一致,因此您需要做更多的工作来支持每种语言。

一种替代方法是通过一些定义明确的接口(例如,使用标准I / O流或某些特定端口上的TCP或某些协议的协议)生成单独的沙盒处理并进行交互。 IIRC就是过去Google AI挑战的工作方式。 这样,您不必专门实现需要支持的每种语言。 人们只需要提供符合您的界面的可执行文件即可。 当然,您会遇到安全地对其进行沙箱处理的其他问题,但这仍然是一个普遍的问题,而不是必须根据每种语言解决的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM