7

可能重复:
从非托管代码调用托管 .NET 代码的最佳方式

我很想知道是否可以将 C# 用作托管在 c++ 本机应用程序中的脚本语言。我已经在自己的游戏引擎上工作了 5 年,但我从未接触过它的脚本方面。我喜欢在 Unity 中为游戏中的不同对象编写 C# 脚本的方式。

我做了一些搜索,但找不到任何实际使用的东西。

请注意,我的问题与.Net 无关,而是与作为通用语言的 C# 有关。

只是为了确保,我会说明这一点:我不想从 C# 调用本机 c++。我想要反过来。

如果有人可以向我指出一些资源,我将不胜感激。

4

3 回答 3

6

是的,您要做的是在您自己的应用程序中托管 CLR。这是一篇 MSDN 文章。

http://msdn.microsoft.com/en-us/magazine/cc301479.aspx

那篇文章的作者还有一本书,涵盖了它的各个方面。一旦你在你的应用程序中启动并运行 CLR,如果你想要真正的脚本,你会想要动态编译代码,并且 cirrus 提供了一些关于如何做到这一点的链接。

您不可避免地还需要将部分主应用程序公开到 CLR 命名空间中。否则,您将无法访问主托管应用程序的任何特定功能。

编辑:当我说“真正的脚本”时,我的意思是您在运行时为您的脚本使用扩展名为 .cs 的文本文件。预先编译它们然后将 .DLL 包含在托管应用程序中会更有效,但是您可以两种方式都这样做。

于 2012-10-09T20:40:56.400 回答
1

看看 CodeDOM。现在还有 Reflection.Emit 和 Linq.Expressions - 这里有类似的问题;

是否可以动态编译和执行 C# 代码片段?

使用 C# 动态编译代码

编译运行动态代码,不生成EXE?

于 2012-10-09T20:34:25.400 回答
0

您可能想查看Rickard Nilsson的CSRepl的来源。它是一个 C# 交互式解释器。它不托管 CLR,因为它是托管的,但会创建 C# 脚本环境。

于 2012-10-09T21:55:54.847 回答