2 using System
.Reflection
;
3 using System
.Reflection
.Emit
;
6 public class TestAssemblyResolveEvent
{
7 public static int Main (String
[] args
) {
8 // Regression test for https://bugzilla.xamarin.com/show_bug.cgi?id=57851
10 // If the custom attributes of an assembly trigger a
11 // ResolveEventHandler, and that handler returns an
12 // AssemblyBuilder, don't crash.
13 var h
= new MockResolver ("assemblyresolve_event5_label");
14 var aName
= new AssemblyName ("assemblyresolve_event5_helper");
15 var a
= AppDomain
.CurrentDomain
.Load (aName
);
16 var t
= a
.GetType ("MyClass");
18 var cas
= t
.GetCustomAttributes (true);
25 public class MockResolver
{
26 private Assembly mock
;
27 private ResolveEventHandler d
;
28 private string theName
;
30 public MockResolver (string theName
) {
31 mock
= CreateMock (theName
);
32 d
= new ResolveEventHandler (HandleResolveEvent
);
33 this.theName
= theName
;
36 public void StartHandling () {
37 AppDomain
.CurrentDomain
.AssemblyResolve
+= d
;
40 public void StopHandling () {
41 AppDomain
.CurrentDomain
.AssemblyResolve
-= d
;
44 public Assembly
HandleResolveEvent (Object sender
, ResolveEventArgs args
) {
45 Console
.Error
.WriteLine ("handling load of {0}", args
.Name
);
46 if (args
.Name
.StartsWith (theName
))
52 private static Assembly
CreateMock (string s
) {
53 var an
= new AssemblyName (s
);
54 var ab
= AssemblyBuilder
.DefineDynamicAssembly (an
, AssemblyBuilderAccess
.Run
);
55 var mb
= ab
.DefineDynamicModule (an
.Name
);
57 var tb
= mb
.DefineType ("Foo", TypeAttributes
.Public
);
58 tb
.DefineDefaultConstructor (MethodAttributes
.Public
);