Reîncărcarea domeniului mono sau a ansamblurilor
Dezvoltăm un joc și folosim C # și C ++ cu ajutorul mono.

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