HANDLE_FUNCTION_RETURN_VAL (is_ok (error));
}
-MonoArrayHandle
-ves_icall_System_AppDomain_GetAssemblies (MonoAppDomainHandle ad, MonoBoolean refonly, MonoError *error)
+static MonoArrayHandle
+get_assembly_array_from_domain (MonoDomain *domain, MonoBoolean refonly, MonoError *error)
{
- error_init (error);
- MonoDomain *domain = MONO_HANDLE_GETVAL (ad, data);
- MonoAssembly* ass;
- GSList *tmp;
int i;
GPtrArray *assemblies;
- /*
- * Make a copy of the list of assemblies because we can't hold the assemblies
- * lock while creating objects etc.
- */
- assemblies = g_ptr_array_new ();
- /* Need to skip internal assembly builders created by remoting */
- mono_domain_assemblies_lock (domain);
- for (tmp = domain->domain_assemblies; tmp; tmp = tmp->next) {
- ass = (MonoAssembly *)tmp->data;
- MonoBoolean ass_refonly = mono_asmctx_get_kind (&ass->context) == MONO_ASMCTX_REFONLY;
- /* .NET Framework GetAssemblies() includes LoadFrom and Load(byte[]) assemblies, too */
- /* For netcore, this should return all the assemblies in the domain - from every ALC */
- if (refonly != ass_refonly)
- continue;
- if (ass->corlib_internal)
- continue;
- g_ptr_array_add (assemblies, ass);
- }
- mono_domain_assemblies_unlock (domain);
+ assemblies = mono_domain_get_assemblies (domain, refonly);
MonoArrayHandle res = mono_array_new_handle (domain, mono_class_get_assembly_class (), assemblies->len, error);
goto_if_nok (error, leave);
return res;
}
+#ifdef ENABLE_NETCORE
+MonoArrayHandle
+ves_icall_System_Runtime_Loader_AssemblyLoadContext_InternalGetLoadedAssemblies (MonoError *error)
+{
+ MonoDomain *domain = mono_domain_get ();
+ return get_assembly_array_from_domain (domain, FALSE, error);
+}
+#else
+MonoArrayHandle
+ves_icall_System_AppDomain_GetAssemblies (MonoAppDomainHandle ad, MonoBoolean refonly, MonoError *error)
+{
+ MonoDomain *domain = MONO_HANDLE_GETVAL (ad, data);
+ return get_assembly_array_from_domain (domain, refonly, error);
+}
+#endif
+
MonoAssembly*
mono_try_assembly_resolve (MonoDomain *domain, const char *fname_raw, MonoAssembly *requesting, gboolean refonly, MonoError *error)
{
HANDLES(MARSHAL_41, "copy_from_unmanaged_fixed", ves_icall_System_Runtime_InteropServices_Marshal_copy_from_unmanaged, void, 5, (gconstpointer, gint32, MonoArray, gint32, gpointer))
HANDLES(MARSHAL_42, "copy_to_unmanaged_fixed", ves_icall_System_Runtime_InteropServices_Marshal_copy_to_unmanaged, void, 5, (MonoArray, gint32, gpointer, gint32, gconstpointer))
-ICALL_TYPE(ALC, "System.Runtime.Loader.AssemblyLoadContext", ALC_2)
+ICALL_TYPE(ALC, "System.Runtime.Loader.AssemblyLoadContext", ALC_4)
+HANDLES(ALC_4, "InternalGetLoadedAssemblies", ves_icall_System_Runtime_Loader_AssemblyLoadContext_InternalGetLoadedAssemblies, MonoArray, 0, ())
HANDLES(ALC_2, "InternalInitializeNativeALC", ves_icall_System_Runtime_Loader_AssemblyLoadContext_InternalInitializeNativeALC, gpointer, 3, (gpointer, MonoBoolean, MonoBoolean))
HANDLES(ALC_1, "InternalLoadFile", ves_icall_System_Runtime_Loader_AssemblyLoadContext_InternalLoadFile, MonoReflectionAssembly, 3, (gpointer, MonoString, MonoStackCrawlMark_ptr))
HANDLES(ALC_3, "InternalLoadFromStream", ves_icall_System_Runtime_Loader_AssemblyLoadContext_InternalLoadFromStream, MonoReflectionAssembly, 5, (gpointer, gpointer, gint32, gpointer, gint32))
# https://github.com/mono/mono/issues/14854
-nomethod Microsoft.VisualBasic.Tests.ErrObjectTests.Clear
-# Microsoft.VisualBasic.ApplicationServices.AssemblyInfo.LoadedAssemblies not implemented
--nomethod Microsoft.VisualBasic.ApplicationServices.Tests.AssemblyInfoTests.LoadedAssemblies
-
####################################################################
## System.CodeDom.Tests
####################################################################
public static Assembly[] GetLoadedAssemblies ()
{
- throw new NotImplementedException ();
+ return InternalGetLoadedAssemblies ();
}
public static AssemblyLoadContext GetLoadContext (Assembly assembly)
[MethodImplAttribute (MethodImplOptions.InternalCall)]
extern static Assembly InternalLoadFromStream (IntPtr nativeAssemblyLoadContext, IntPtr assm, int assmLength, IntPtr symbols, int symbolsLength);
+ [MethodImplAttribute (MethodImplOptions.InternalCall)]
+ extern static Assembly[] InternalGetLoadedAssemblies ();
+
internal static Assembly DoAssemblyResolve (string name)
{
return AssemblyResolve (null, new ResolveEventArgs (name));