首先第一个问题是java会提供一个虚拟机,然后c#的虚拟机在哪里呢?
众所周知的面试题,在clr runtime...What?公共语言运行时...这个烂名字....为什么起这个烂名字,因为微软避开"虚拟机"这个缓慢意思的词..
回到问题来,那么unity3d的它的跨平台服务的c#脚本虚拟机呢?
然后搜了一下,就很容易找到一个关键字"mono",它可以让net嵌入到exe,一种跨平台的实现了..
具体看这篇文章 .NET和JAVA的跨平台,我们很期望,其实不容易
那么mono的教程....找了半天,发现没有什么教程.......
唯一可用的教程是这里:
https://blog.csdn.net/zouwei678/article/details/54908687
https://blog.csdn.net/zouwei678/article/details/54909403
但是他的例子有点过时, 我在win10下用vs2019, 用的是 mono-6.12.0.98-x64-0.msi
mono下载地址:http://www.mono-project.com/download/
64位安装完成后将在: C:Program FilesMono
32位安装完成后将在: C:Program Files (x86)Mono
安装了之后设置环境
写一个 Program.cs

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MonoCsharp { public static class MainTest { static void Main() { System.Console.WriteLine("你好,世界"); System.Console.Read(); } } }
然后在这个文件的文件夹上面用power sell, 输入下面的,编译成DLL....路径可以先忽略
mcs Program.cs -t:library
一、新建c++工程并依赖,项目路径全英文!!!
二、根据下载的mono的版本,设置编译生成的目标位X64 或 X86
三、设置包含路径、库目录路径、附加依赖项
include:
C:Program FilesMonoincludemono-2.0
lib:
C:Program FilesMonolib
附加依赖项
mono-2.0.lib 原博客写的是这个,
mono-2.0-sgen.lib 但是我下载了的新版本是要这个
四、写C++代码,记得修改一下c#的dll路径..

// MonoDemo.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include <iostream> #include <mono/jit/jit.h> #include <mono/metadata/assembly.h> #include <mono/metadata/class.h> #include <mono/metadata/debug-helpers.h> #include <mono/metadata/mono-config.h> MonoDomain* domain; int main() { // Program.cs所编译dll所在的位置 const char* managed_binary_path = "D:/MonoDemo/x64/Debug/Program.dll"; //获取应用域 domain = mono_jit_init("Test"); //加载程序集ManagedLibrary.dll MonoAssembly* assembly = mono_domain_assembly_open(domain, managed_binary_path); MonoImage* image = mono_assembly_get_image(assembly); // =====================================================准备调用 //获取MonoClass,类似于反射 MonoClass* main_class = mono_class_from_name(image, "MonoCsharp", "MainTest"); //获取要调用的MonoMethodDesc,主要调用过程 MonoMethodDesc* entry_point_method_desc = mono_method_desc_new("MonoCsharp.MainTest:Main()", true); MonoMethod* entry_point_method = mono_method_desc_search_in_class(entry_point_method_desc, main_class); mono_method_desc_free(entry_point_method_desc); //调用方法 mono_runtime_invoke(entry_point_method, NULL, NULL, NULL); //释放应用域 mono_jit_cleanup(domain); return 0; }
五、运行会出现这样的报错
The assembly mscorlib.dll was not found or could not be loaded.
It should have been installed in the `D:MonoDemox64libmono4.5mscorlib.dll' directory.
这个时候只需要 C:Program FilesMonolib 拷贝到 D:MonoDemo{你的工程}x64lib
一定要注意,{你的工程}的项目路径一定不能有中文,因为这个东西支持不好......