Please do not reply to this email- if you want to comment on the bug, go to the URL shown below and enter your comments there.
Changed by [EMAIL PROTECTED] http://bugzilla.ximian.com/show_bug.cgi?id=77002 --- shadow/77002 2005-12-16 07:50:45.000000000 -0500 +++ shadow/77002.tmp.8650 2006-03-14 19:20:36.000000000 -0500 @@ -70,6 +70,75 @@ I think, actually, that this can/should be handled completely in the library: SRE.AssemblyBuilder.SetCustomAttribute, or SRE.ModuleBuilder. Ankit, you may want to look at the second link above and try to see what metadata tables are needed to implement this feature. + +------- Additional Comments From [EMAIL PROTECTED] 2006-03-14 19:20 ------- +I added support for this to the runtime. gmcs can use the new +internal AssemblyBuilder.AddTypeForwarder () method to register type +forwarders. + +Here are the test cases I used: + +<<<<<<<<<<<<<< forward1.cs >>>>>>>>>>>>>>>>>>>>>>>>>>>>> +public class Foo +{ +} +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + +<<<<<<<<<<<<<<< test.cs >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> +using System; +using System.Reflection; +using System.Reflection.Emit; +using System.Runtime.CompilerServices; + +public class Test { + + public static void Main(string[] args) { + Assembly a = Assembly.LoadFrom ("forward1.dll"); + Type forwardedType = a.GetType ("Foo"); + + AppDomain currentDomain = AppDomain.CurrentDomain; + AssemblyName asmName = new AssemblyName(); + asmName.Name = "forward2"; + string asmFileName = "forward2.dll"; + AssemblyBuilder asmBuilder = + currentDomain.DefineDynamicAssembly(asmName, + AssemblyBuilderAccess.RunAndSave); + ModuleBuilder builder = + asmBuilder.DefineDynamicModule("_Created.netmodule", asmFileName); + + typeof (AssemblyBuilder).GetMethod ("AddTypeForwarder", +BindingFlags.NonPublic|BindingFlags.Instance).Invoke (asmBuilder, new +Object [] { forwardedType }); + + asmBuilder.Save(asmFileName); + } +} +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + +<<<<<<<<<<<<<<<<<<<<<< forward3.cs >>>>>>>>>>>>>>>>>>>>>>>>> + +using System; +using System.Reflection; + +public class Tests { + + public static void Main () { + Assembly a = Assembly.LoadFrom ("forward2.dll"); + Console.WriteLine (a.GetType ("Foo")); + Console.WriteLine (a.GetType ("Foo").Assembly); + } +} +<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + +Usage: + +gmcs /target:library forward1.cs +gmcs test.cs +mono test.exe +gmcs forward3.cs +mono forward3.exe + + _______________________________________________ mono-bugs maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-bugs
