/* Class lazy loading functions */
static GENERATE_TRY_GET_CLASS_WITH_CACHE (internals_visible, System.Runtime.CompilerServices, InternalsVisibleToAttribute)
+static GENERATE_TRY_GET_CLASS_WITH_CACHE (reference_assembly, System.Runtime.CompilerServices, ReferenceAssemblyAttribute)
static MonoAssembly*
mono_assembly_invoke_search_hook_internal (MonoAssemblyName *aname, MonoAssembly *requesting, gboolean refonly, gboolean postload);
mono_assemblies_unlock ();
}
+
+/**
+ * mono_assembly_get_reference_assembly_attribute:
+ * @assembly: a MonoAssembly
+ * @error: set on error.
+ *
+ * Returns TRUE if @assembly has the System.Runtime.CompilerServices.ReferenceAssemblyAttribute set.
+ * On error returns FALSE and sets @error.
+ */
+gboolean
+mono_assembly_get_reference_assembly_attribute (MonoAssembly *assembly, MonoError *error)
+{
+ mono_error_init (error);
+
+ MonoCustomAttrInfo *attrs = mono_custom_attrs_from_assembly_checked (assembly, error);
+ return_val_if_nok (error, FALSE);
+ if (!attrs)
+ return FALSE;
+ MonoClass *ref_asm_class = mono_class_try_get_reference_assembly_class ();
+ gboolean result = FALSE;
+ for (int i = 0; i < attrs->num_attrs; ++i) {
+ MonoCustomAttrEntry *attr = &attrs->attrs [i];
+ if (attr->ctor && attr->ctor->klass && attr->ctor->klass == ref_asm_class) {
+ result = TRUE;
+ break;
+ }
+ }
+ mono_custom_attrs_free (attrs);
+ return result;
+}
+
/**
* mono_assembly_open:
* @filename: Opens the assembly pointed out by this name