if (!g_hash_table_lookup (ht, ass)) {
mono_assembly_addref (ass);
g_hash_table_insert (ht, ass, ass);
- domain->domain_assemblies = g_slist_prepend (domain->domain_assemblies, ass);
+ domain->domain_assemblies = g_slist_append (domain->domain_assemblies, ass);
mono_trace (G_LOG_LEVEL_INFO, MONO_TRACE_ASSEMBLY, "Assembly %s[%p] added to domain %s, ref_count=%d", ass->aname.name, ass, domain->friendly_name, ass->ref_count);
}
--- /dev/null
+using System;
+using System.Linq;
+using System.Reflection;
+using System.Reflection.Emit;
+
+class Driver {
+ static int Main () {
+ var dyn = DefineDynamicAssembly (AppDomain.CurrentDomain);
+ var core = TriggerLoadingSystemCore ();
+ var asm = AppDomain.CurrentDomain.GetAssemblies ();
+
+ if (asm [0] != typeof (object).Assembly) {
+ Console.WriteLine ("first assembly must be mscorlib, but it was {0}", asm [0]);
+ return 1;
+ }
+
+ if (asm [1] != typeof (Driver).Assembly) {
+ Console.WriteLine ("second assembly must be test assembly, but it was {0}", asm [1]);
+ return 2;
+ }
+
+ if (asm [2] != dyn) {
+ Console.WriteLine ("third assembly must be SRE, but it was {0}", asm [2]);
+ return 3;
+ }
+
+ if (asm [3] != core) {
+ Console.WriteLine ("last assembly must be System.Core, but it was {0}", asm [3]);
+ return 4;
+ }
+
+ return 0;
+ }
+
+ static Assembly TriggerLoadingSystemCore ()
+ {
+ int[] x = new int[] { 1,2,3};
+ x.Where (v => v > 1);
+ return typeof (Enumerable).Assembly;
+ }
+
+
+ static Assembly DefineDynamicAssembly (AppDomain domain)
+ {
+ AssemblyName assemblyName = new AssemblyName ();
+ assemblyName.Name = "MyDynamicAssembly";
+
+ AssemblyBuilder assemblyBuilder = domain.DefineDynamicAssembly (assemblyName, AssemblyBuilderAccess.Run);
+ ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule ("MyDynamicModule");
+ TypeBuilder typeBuilder = moduleBuilder.DefineType ("MyDynamicType", TypeAttributes.Public);
+ ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor (MethodAttributes.Public, CallingConventions.Standard, null);
+ ILGenerator ilGenerator = constructorBuilder.GetILGenerator ();
+ ilGenerator.EmitWriteLine ("MyDynamicType instantiated!");
+ ilGenerator.Emit (OpCodes.Ret);
+ typeBuilder.CreateType ();
+ return assemblyBuilder;
+ }
+
+}
\ No newline at end of file