Reîncărcarea domeniului mono sau a ansamblurilor

Dezvoltăm un joc și folosim C # și C ++ cu ajutorul mono.

reîncărcarea

Există două DLL pe care le folosim; Dll1 și Dll2. În timpul rulării, vreau să schimb (actualizez) aceste DLL fără a reporni jocul (care durează puțin). Iată codul pe care îl folosim:

mono_world_assembly = mono_domain_assembly_open (mono_domain, Dll1);
mono_world_image = mono_assembly_get_image (mono_world_assembly);

mono_module_assembly = mono_domain_assembly_open (mono_domain, Dll2);
mono_module_image = mono_assembly_get_image (mono_module_assembly);

Am încercat două moduri diferite, dar niciuna nu a avut succes. Nici nu știu care este eroarea exactă, deoarece nu știu cum să depanez mono în C++.

Prima abordare a fost de a utiliza mono_jit_cleanup și apoi, când DLL-urile sunt recompilate, folosiți codul de mai sus pentru a reîncărca DLL-urile.

A doua abordare a fost închiderea ansamblurilor și imaginilor și redeschiderea lor atunci când DLL-urile sunt înlocuite.

Am făcut o greșeală și/sau există o modalitate de a face acest lucru?

Odată ce un ansamblu a fost JITed (ceea ce înseamnă în principiu asta
una dintre metodele sale a fost invocată), nu există nici o modalitate de a o schimba.

Există 2 moduri de a reîncărca un ansamblu:

1) schimbați numele ansamblului și încărcați-l din nou. Rețineți că acest lucru
nu va descărca/elibera tipurile furnizate de ansamblul anterior,
nici tipurile ansamblului reîncărcat nu sunt compatibile cu cele ale
primul. Cu alte cuvinte: nu o faceți decât dacă ați făcut-o
a înțeles aceste dezavantaje.

2) Folosiți domenii de aplicații care pot fi descărcate împreună cu
ansamblurile lor prin proiectare.

Acesta este un model comun în cuvântul .NET și poate fi