gboolean
mono_assembly_has_reference_assembly_attribute (MonoAssembly *assembly, MonoError *error)
{
+ g_assert (assembly && assembly->image);
+ /* .NET Framework appears to ignore the attribute on dynamic
+ * assemblies, so don't call this function for dynamic assemblies. */
+ g_assert (!image_is_dynamic (assembly->image));
error_init (error);
/*
ass->ref_only = refonly;
ass->image = image;
- mono_profiler_assembly_event (ass, MONO_PROFILE_START_LOAD);
+ MONO_PROFILER_RAISE (assembly_loading, (ass));
mono_assembly_fill_assembly_name (image, &ass->aname);
mono_assembly_invoke_load_hook (ass);
- mono_profiler_assembly_loaded (ass, MONO_PROFILE_OK);
+ MONO_PROFILER_RAISE (assembly_loaded, (ass));
return ass;
}
{
MonoError refasm_error;
error_init (&refasm_error);
- if (candidate && !refonly && mono_assembly_has_reference_assembly_attribute (candidate, &refasm_error)) {
- candidate = NULL;
+ if (candidate && !refonly) {
+ /* .NET Framework seems to not check for ReferenceAssemblyAttribute on dynamic assemblies */
+ if (!image_is_dynamic (candidate->image) &&
+ mono_assembly_has_reference_assembly_attribute (candidate, &refasm_error))
+ candidate = NULL;
}
mono_error_cleanup (&refasm_error);
return candidate;
if (InterlockedDecrement (&assembly->ref_count) > 0)
return FALSE;
- mono_profiler_assembly_event (assembly, MONO_PROFILE_START_UNLOAD);
+ MONO_PROFILER_RAISE (assembly_unloading, (assembly));
mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_ASSEMBLY, "Unloading assembly %s [%p].", assembly->aname.name, assembly);
g_slist_free (assembly->friend_assembly_names);
g_free (assembly->basedir);
- mono_profiler_assembly_event (assembly, MONO_PROFILE_END_UNLOAD);
+ MONO_PROFILER_RAISE (assembly_unloaded, (assembly));
return TRUE;
}