From: Aleksey Kliger Date: Wed, 26 Jul 2017 23:36:05 +0000 (-0400) Subject: [test] Check that one AssemblyBuilder can refer to a TypeBuilder from another. X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=dc4c79a52f60b2657fb99fa3cf4c44efe2ee350a;p=mono.git [test] Check that one AssemblyBuilder can refer to a TypeBuilder from another. Regression test for https://bugzilla.xamarin.com/show_bug.cgi?id=58421 --- diff --git a/mcs/class/corlib/Test/System.Reflection.Emit/TypeBuilderTest.cs b/mcs/class/corlib/Test/System.Reflection.Emit/TypeBuilderTest.cs index bd2f52bfbb7..e4f73aea23f 100644 --- a/mcs/class/corlib/Test/System.Reflection.Emit/TypeBuilderTest.cs +++ b/mcs/class/corlib/Test/System.Reflection.Emit/TypeBuilderTest.cs @@ -11408,5 +11408,39 @@ namespace MonoTests.System.Reflection.Emit 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"); + } + } }