Skip to content
Merged
Prev Previous commit
Next Next commit
Take 3 to fix assembly load for typemap lookup
Context: 9a7aee7
Context: 7b46391

Fake a MonoVM hook to try to load the assembly.
  • Loading branch information
grendello committed Jan 29, 2024
commit cde4e7186236d12d30d6cae2056a8a3a6da67818
22 changes: 13 additions & 9 deletions src/monodroid/jni/embedded-assemblies.cc
Original file line number Diff line number Diff line change
Expand Up @@ -699,17 +699,21 @@ EmbeddedAssemblies::typemap_java_to_managed (hash_t hash, const MonoString *java
if (module->image == nullptr) {
log_debug (LOG_ASSEMBLY, "typemap: assembly '%s' hasn't been loaded yet, attempting a full load", module->assembly_name);

// Trigger MonoVM's machinery to load an image. This will involve calling us back to find, uncompress (if
// necessary) and load the assembly from whatever storage the app uses.
dynamic_local_string<SENSIBLE_PATH_MAX> assembly_name;
assembly_name.assign_c (module->assembly_name);
assembly_name.append (SharedConstants::DLL_EXTENSION);
// Fake a request from MonoVM to load the assembly.
MonoAssemblyName *assembly_name = mono_assembly_name_new (module->assembly_name);
MonoAssembly *assm;

MonoImageOpenStatus status{};
MonoAssembly *assm = mono_assembly_open (assembly_name.get (), &status);
if (assembly_name == nullptr) {
log_error (LOG_ASSEMBLY, "typemap: failed to create Mono assembly name for '%s'", module->assembly_name);
assm = nullptr;
} else {
MonoAssemblyLoadContextGCHandle alc_gchandle = mono_alc_get_default_gchandle ();
MonoError mono_error;
assm = embeddedAssemblies.open_from_bundles (assembly_name, alc_gchandle, &mono_error, false /* ref_only */);
}

if (status != MonoImageOpenStatus::MONO_IMAGE_OK) {
log_warn (LOG_ASSEMBLY, "typemap: failed to load managed assembly '%s'. %s", assembly_name.get (), mono_image_strerror (status));
if (assm == nullptr) {
log_warn (LOG_ASSEMBLY, "typemap: failed to load managed assembly '%s'", module->assembly_name);
} else {
module->image = mono_assembly_get_image (assm);
}
Expand Down