我想知道是否存在使用CLI (公共语言基础结构)实现的.NET兼容CLR,例如,使用.NET本身,或者至少是否存在任何资源将有助于建立一个。
基本上,类似于.NET程序,它将程序集作为MemoryStreams加载,解析字节码,构造类型并执行指令。可选地,它可以使用Reflection.Emit JIT编译为标准IL。
我不想编译 .NET语言由原始CLR运行。我想要一个用.NET语言编写的CLR (不是通常的非托管C ++或C语言)和运行 CIL。如果做得对,它应该能够自行运行。
有关使用Mono.Cecil进行此类事情的任何想法吗?
答案 0 :(得分:5)
我认为目前没有任何独立的.net虚拟机可以自托管,但Cosmos和SharpOS都是用C#编写的.net运行时。
可以重用一些运行时代码来增加独立运行时。 Cosmos可用于在启动时托管自定义应用程序:http://www.codeproject.com/KB/system/CosmosIntro.aspx
答案 1 :(得分:4)
您应该查看IKVM.NET Project。它包括一个用.NET编写的Java虚拟机。
我知道这不是一个在CLR之上运行的实际CLR,但它是我所知道的最接近你想要的东西。
答案 2 :(得分:1)
答案 3 :(得分:1)
如果您愿意将“运行CIL”的定义扩展为“JIT-将CIL编译为本机代码”,那么您应该查看Managed Operating System Alliance - 一群人(包括我自己)工作创建编写托管操作系统内核所需的运行时片段。
目前还有很多工作要做,但有可能JIT编译并运行简单方法(仅限Win32 - 我们目前使用P / Invoke创建本机代码缓冲区)
答案 4 :(得分:1)
原则上可以通过组合技术来实现:
也可以使用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