我们目前正在开发一个针对.NetFramework,Version = 4.6的C#应用程序。我们正在Windows上的Visual Studio中编译应用程序,但是将其部署在运行Mono的docker容器中:
Mono JIT compiler version 4.4.2 (Stable 4.4.2.11/f72fe45 Fri Jul 29 09:58:49 UTC 2016)
在这个应用程序中,我们使用Roslyn编译器动态生成代码,然后将结果加载到Assembly中(不设置Assembly元数据)。
当我们在Windows上运行此应用程序时,一切正常。我们生成代码,编译代码并加载程序集。我们可以更改代码,重新编译程序集并加载它。在Windows上,这一切都有效,加载的类型都已成功更新。
但是,转到Mono,我们看到程序集的第一次编译按预期成功加载,但是未加载对已编译程序集的后续更改,并且始终返回初始加载的程序集。
即
在Windows上,我们使用class A1
编译代码A.加载程序集:
var a = Assembly.Load(byte[]));
然后我们从程序集中获取类型:
var t = a.GetType("A1");
然后更改代码class A1; class B1
,重新编译,重新加载,我们就可以获得B1
在Mono上,我们可以获得类型A1
,但是当我们想要更改为B1
时,类型不存在,并且它始终将第一个已编译的程序集保留为返回。
有没有办法让Mono产生与Windows相同的结果?