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=80487 --- shadow/80487 2007-01-12 11:15:38.000000000 -0500 +++ shadow/80487.tmp.22763 2007-01-12 12:26:24.000000000 -0500 @@ -94,6 +94,105 @@ I did a few tests and the module constructor code is run as soon as the assembly is loaded. ------- Additional Comments From [EMAIL PROTECTED] 2007-01-12 11:15 ------- Can you show the test: did you just load the assembly without accessing methods or fields? + +------- Additional Comments From [EMAIL PROTECTED] 2007-01-12 12:26 ------- +Ok, here's a better test that shows that I was wrong, the module +constructor is executed just before a field/method is used. + +First the IL sample: + +.assembly TestDll { } +.assembly extern mscorlib { } + +.method assembly specialname rtspecialname static + void .cctor() cil managed +{ + ldstr "Module contructor executed" + call void [mscorlib]System.Console::WriteLine(string) + ret +} + +.namespace NS +{ + .class public TestClass extends [mscorlib]System.Object + { + .field public static int32 TestField + + .method public static void TestMethod() cil managed + { + ldstr "TestMethod executed" + call void [mscorlib]System.Console::WriteLine(string) + ret + } + } +} + + +And the Test.cs: + + +using System; + +public class Program +{ + public static void Main() + { + System.Reflection.Assembly asm = +System.Reflection.Assembly.LoadFrom("TestDll.dll"); + Console.WriteLine("assembly loaded"); + Type type = asm.GetType("NS.TestClass", true); + Console.WriteLine("got type 'NS.TestClass'"); + + System.Reflection.MethodInfo method = +type.GetMethod("TestMethod"); + Console.WriteLine("got method 'TestMethod'"); + Console.WriteLine("about to invoke 'TestMethod'"); + method.Invoke(null, null); + } +} + + +this will show: + +assembly loaded +got type 'NS.TestClass' +got method 'TestMethod' +about to invoke 'TestMethod' +Module contructor executed +TestMethod executed + + +For Test2.cs: + + +using System; + +public class Program +{ + public static void Main() + { + System.Reflection.Assembly asm = +System.Reflection.Assembly.LoadFrom("TestDll.dll"); + Console.WriteLine("assembly loaded"); + Type type = asm.GetType("NS.TestClass", true); + Console.WriteLine("got type 'NS.TestClass'"); + + System.Reflection.FieldInfo field = type.GetField("TestField"); + Console.WriteLine("about to get value of 'TestField'"); + Console.WriteLine("got field 'TestField'"); + Console.WriteLine("Value of field: " + field.GetValue(null)); + } +} + + +will show: + +assembly loaded +got type 'NS.TestClass' +got field 'TestField' +about to get value of 'TestField' +Module contructor executed +Value of field: 0 _______________________________________________ mono-bugs maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-bugs
