@@ -62,13 +62,23 @@ public void GetAddinDescription (IProgressStatus monitor, AddinRegistry registry
62
62
ReleaseDomain ( ) ;
63
63
}
64
64
}
65
-
65
+
66
+ // ensure types from this assembly returned to this domain from the remote domain can
67
+ // be resolved even if we're in the LoadFrom context
68
+ static System . Reflection . Assembly MonoAddinsAssemblyResolve ( object sender , ResolveEventArgs args )
69
+ {
70
+ var asm = typeof ( SetupDomain ) . Assembly ;
71
+ return args . Name == asm . FullName ? asm : null ;
72
+ }
73
+
66
74
RemoteSetupDomain GetDomain ( )
67
75
{
68
76
lock ( this ) {
69
77
if ( useCount ++ == 0 ) {
78
+ AppDomain . CurrentDomain . AssemblyResolve += MonoAddinsAssemblyResolve ;
70
79
domain = AppDomain . CreateDomain ( "SetupDomain" , null , AppDomain . CurrentDomain . SetupInformation ) ;
71
- remoteSetupDomain = ( RemoteSetupDomain ) domain . CreateInstanceFromAndUnwrap ( typeof ( RemoteSetupDomain ) . Assembly . Location , typeof ( RemoteSetupDomain ) . FullName ) ;
80
+ var type = typeof ( RemoteSetupDomain ) ;
81
+ remoteSetupDomain = ( RemoteSetupDomain ) domain . CreateInstanceFromAndUnwrap ( type . Assembly . Location , type . FullName ) ;
72
82
}
73
83
return remoteSetupDomain ;
74
84
}
@@ -81,13 +91,24 @@ void ReleaseDomain ()
81
91
AppDomain . Unload ( domain ) ;
82
92
domain = null ;
83
93
remoteSetupDomain = null ;
94
+ AppDomain . CurrentDomain . AssemblyResolve -= MonoAddinsAssemblyResolve ;
84
95
}
85
96
}
86
97
}
87
98
}
88
-
99
+
89
100
class RemoteSetupDomain : MarshalByRefObject
90
101
{
102
+ public RemoteSetupDomain ( )
103
+ {
104
+ // ensure types from this assembly passed to this domain from the main domain
105
+ // can be resolved even though we're in the LoadFrom context
106
+ AppDomain . CurrentDomain . AssemblyResolve += ( o , a ) => {
107
+ var asm = typeof ( RemoteSetupDomain ) . Assembly ;
108
+ return a . Name == asm . FullName ? asm : null ;
109
+ } ;
110
+ }
111
+
91
112
public override object InitializeLifetimeService ( )
92
113
{
93
114
return null ;
0 commit comments