是否有CLR上运行的CLR?

时间:2008-09-30 00:27:03

标签: .net clr cil

我想知道是否存在使用CLI (公共语言基础结构)实现的.NET兼容CLR,例如,使用.NET本身,或者至少是否存在任何资源将有助于建立一个。

基本上,类似于.NET程序,它将程序集作为MemoryStreams加载,解析字节码,构造类型并执行指令。可选地,它可以使用Reflection.Emit JIT编译为标准IL。

我不想编译 .NET语言由原始CLR运行。我想要一个用.NET语言编写的CLR (不是通常的非托管C ++或C语言)运行 CIL。如果做得对,它应该能够自行运行。

有关使用Mono.Cecil进行此类事情的任何想法吗?

6 个答案:

答案 0 :(得分:5)

我认为目前没有任何独立的.net虚拟机可以自托管,但CosmosSharpOS都是用C#编写的.net运行时。

可以重用一些运行时代码来增加独立运行时。 Cosmos可用于在启动时托管自定义应用程序:http://www.codeproject.com/KB/system/CosmosIntro.aspx

答案 1 :(得分:4)

您应该查看IKVM.NET Project。它包括一个用.NET编写的Java虚拟机。

http://www.ikvm.net/

我知道这不是一个在CLR之上运行的实际CLR,但它是我所知道的最接近你想要的东西。

答案 2 :(得分:1)

我不知道,但JVM上运行JVM的想法应该会有所帮助。

答案 3 :(得分:1)

如果您愿意将“运行CIL”的定义扩展为“JIT-将CIL编译为本机代码”,那么您应该查看Managed Operating System Alliance - 一群人(包括我自己)工作创建编写托管操作系统内核所需的运行时片段。

目前还有很多工作要做,但有可能JIT编译并运行简单方法(仅限Win32 - 我们目前使用P / Invoke创建本机代码缓冲区)

答案 4 :(得分:1)

原则上可以通过组合技术来实现:

  • Jikes RVM是一个用Java编写的Java虚拟机实现。
  • IKVM.NET,是.NET上Java平台的一个实现。

也可以使用Mono,编译为LLVM字节码,使用Emscripten将字节码编译为Javascript,并使用各种解释器在.NET上运行Javascript。

答案 5 :(得分:-2)

查看System.Reflection.Emit命名空间,特别是ILGenerator类。

你可以动态发射IL。

http://msdn.microsoft.com/en-us/library/system.reflection.emit.ilgenerator_members.aspx