3 * Copyright 2015 Xamarin Inc
4 * Licensed under the MIT license. See LICENSE file in the project root for full license information.
6 #ifndef __MONO_METADATA_ASSEMBLY_INTERNALS_H__
7 #define __MONO_METADATA_ASSEMBLY_INTERNALS_H__
11 #include <mono/metadata/assembly.h>
12 #include <mono/metadata/metadata-internals.h>
14 #ifndef ENABLE_NETCORE
15 #define MONO_ASSEMBLY_CORLIB_NAME "mscorlib"
17 #define MONO_ASSEMBLY_CORLIB_NAME "System.Private.CoreLib"
20 /* Flag bits for mono_assembly_names_equal_flags (). */
22 /* Default comparison: all fields must match */
23 MONO_ANAME_EQ_NONE
= 0x0,
24 /* Don't compare public key token */
25 MONO_ANAME_EQ_IGNORE_PUBKEY
= 0x1,
26 /* Don't compare the versions */
27 MONO_ANAME_EQ_IGNORE_VERSION
= 0x2,
28 /* When comparing simple names, ignore case differences */
29 MONO_ANAME_EQ_IGNORE_CASE
= 0x4,
31 MONO_ANAME_EQ_MASK
= 0x7
32 } MonoAssemblyNameEqFlags
;
34 G_ENUM_FUNCTIONS (MonoAssemblyNameEqFlags
);
37 mono_assembly_name_free_internal (MonoAssemblyName
*aname
);
40 mono_assembly_name_culture_is_neutral (const MonoAssemblyName
*aname
);
43 mono_assembly_names_equal_flags (MonoAssemblyName
*l
, MonoAssemblyName
*r
, MonoAssemblyNameEqFlags flags
);
46 mono_assembly_get_assemblyref_checked (MonoImage
*image
, int index
, MonoAssemblyName
*aname
, MonoError
*error
);
48 MONO_API MonoImage
* mono_assembly_load_module_checked (MonoAssembly
*assembly
, uint32_t idx
, MonoError
*error
);
50 MonoAssembly
* mono_assembly_load_with_partial_name_internal (const char *name
, MonoImageOpenStatus
*status
);
53 typedef gboolean (*MonoAssemblyAsmCtxFromPathFunc
) (const char *absfname
, MonoAssembly
*requesting_assembly
, gpointer user_data
, MonoAssemblyContextKind
*out_asmctx
);
55 void mono_install_assembly_asmctx_from_path_hook (MonoAssemblyAsmCtxFromPathFunc func
, gpointer user_data
);
57 typedef MonoAssembly
* (*MonoAssemblyPreLoadFuncV2
) (MonoAssemblyLoadContext
*alc
, MonoAssemblyName
*aname
, char **assemblies_path
, gboolean refonly
, gpointer user_data
, MonoError
*error
);
59 void mono_install_assembly_preload_hook_v2 (MonoAssemblyPreLoadFuncV2 func
, gpointer user_data
, gboolean refonly
);
61 typedef MonoAssembly
* (*MonoAssemblySearchFuncV2
) (MonoAssemblyLoadContext
*alc
, MonoAssembly
*requesting
, MonoAssemblyName
*aname
, gboolean refonly
, gboolean postload
, gpointer user_data
, MonoError
*error
);
64 mono_install_assembly_search_hook_v2 (MonoAssemblySearchFuncV2 func
, gpointer user_data
, gboolean refonly
, gboolean postload
);
66 typedef void (*MonoAssemblyLoadFuncV2
) (MonoAssemblyLoadContext
*alc
, MonoAssembly
*assembly
, gpointer user_data
, MonoError
*error
);
69 mono_install_assembly_load_hook_v2 (MonoAssemblyLoadFuncV2 func
, gpointer user_data
);
72 mono_assembly_invoke_load_hook_internal (MonoAssemblyLoadContext
*alc
, MonoAssembly
*ass
);
74 /* If predicate returns true assembly should be loaded, if false ignore it. */
75 typedef gboolean (*MonoAssemblyCandidatePredicate
)(MonoAssembly
*, gpointer
);
77 typedef struct MonoAssemblyLoadRequest
{
78 /* Assembly Load context that is requesting an assembly. */
79 MonoAssemblyContextKind asmctx
;
80 MonoAssemblyLoadContext
*alc
;
81 /* Predicate to apply to candidate assemblies. Optional. */
82 MonoAssemblyCandidatePredicate predicate
;
83 /* user_data for predicate. Optional. */
84 gpointer predicate_ud
;
85 } MonoAssemblyLoadRequest
;
87 typedef struct MonoAssemblyOpenRequest
{
88 MonoAssemblyLoadRequest request
;
89 /* Assembly that is requesting the wanted assembly. Optional. */
90 MonoAssembly
*requesting_assembly
;
91 } MonoAssemblyOpenRequest
;
93 typedef struct MonoAssemblyByNameRequest
{
94 MonoAssemblyLoadRequest request
;
95 /* Assembly that is requesting the wanted assembly name. Optional.
96 * If no_postload_search is TRUE, requesting_assembly is not used.
98 MonoAssembly
*requesting_assembly
;
99 /* basedir to probe for the wanted assembly name. Optional. */
101 gboolean no_postload_search
; /* FALSE is usual */
102 /* FIXME: predicate unused? */
103 } MonoAssemblyByNameRequest
;
105 void mono_assembly_request_prepare (MonoAssemblyLoadRequest
*req
,
107 MonoAssemblyContextKind asmctx
);
109 MonoAssembly
* mono_assembly_request_open (const char *filename
,
110 const MonoAssemblyOpenRequest
*req
,
111 MonoImageOpenStatus
*status
);
113 MonoAssembly
* mono_assembly_request_load_from (MonoImage
*image
, const char *fname
,
114 const MonoAssemblyLoadRequest
*req
,
115 MonoImageOpenStatus
*status
);
117 MonoAssembly
* mono_assembly_request_byname (MonoAssemblyName
*aname
,
118 const MonoAssemblyByNameRequest
*req
,
119 MonoImageOpenStatus
*status
);
121 /* MonoAssemblyCandidatePredicate that compares the assembly name (name, version,
122 * culture, public key token) of the candidate with the wanted name, if the
123 * wanted name has a public key token (if not present, always return true).
124 * Pass the wanted MonoAssemblyName* as the user_data.
127 mono_assembly_candidate_predicate_sn_same_name (MonoAssembly
*candidate
, gpointer wanted_name
);
130 mono_assembly_binding_applies_to_image (MonoImage
* image
, MonoImageOpenStatus
*status
);
133 mono_assembly_load_from_assemblies_path (gchar
**assemblies_path
, MonoAssemblyName
*aname
, MonoAssemblyContextKind asmctx
);
136 mono_assembly_loaded_internal (MonoAssemblyLoadContext
*alc
, MonoAssemblyName
*aname
, gboolean refonly
);
138 MONO_PROFILER_API MonoAssemblyName
*
139 mono_assembly_get_name_internal (MonoAssembly
*assembly
);
141 MONO_PROFILER_API MonoImage
*
142 mono_assembly_get_image_internal (MonoAssembly
*assembly
);
144 #endif /* __MONO_METADATA_ASSEMBLY_INTERNALS_H__ */