assembly.Save (ASSEMBLY_NAME + ".dll");
}
+
+ [Test]
+ public void TwoAssembliesMidFlightTest () {
+ // Check that one AssemblyBuilder can refer to a TypeBuilder from another AssemblyBuilder.
+ // Regression test for https://bugzilla.xamarin.com/show_bug.cgi?id=58421
+ var name2 = "MonoTests.System.Reflection.Emit.TypeBuilderTest2";
+ var assemblyName2 = new AssemblyName (name2);
+ var assembly2 =
+ Thread.GetDomain ().DefineDynamicAssembly (
+ assemblyName2, AssemblyBuilderAccess.RunAndSave, tempDir);
+
+ var module2 = assembly2.DefineDynamicModule (name2, name2 + ".dll");
+
+ var tb = module.DefineType ("Foo", TypeAttributes.Public);
+ var tb2 = module2.DefineType ("Foo2", TypeAttributes.Public);
+
+ var cb = tb.DefineConstructor (MethodAttributes.Public, CallingConventions.Standard,
+ Type.EmptyTypes);
+
+ var ilg = cb.GetILGenerator ();
+
+ ilg.Emit (OpCodes.Ldtoken, tb2); // N.B. type from the other AssemblyBuilder
+ ilg.Emit (OpCodes.Pop);
+ ilg.Emit (OpCodes.Ret);
+
+ var t = tb.CreateType ();
+ tb2.CreateType ();
+
+ var ci = t.GetConstructor (Type.EmptyTypes);
+ var x = ci.Invoke (null);
+ assembly.Save (ASSEMBLY_NAME + ".dll");
+ assembly2.Save (name2 + ".dll");
+ }
+
}
}