5 // Paolo Molaro (lupus@ximian.com)
6 // Dietmar Maurer (dietmar@ximian.com)
7 // Miguel de Icaza (miguel@ximian.com)
9 // (C) 2001, 2002 Ximian, Inc. http://www.ximian.com
13 using System.Collections;
14 using System.Globalization;
15 using System.Reflection;
16 using System.Reflection.Emit;
17 using System.Runtime.CompilerServices;
18 using System.Runtime.Remoting;
19 using System.Security.Principal;
20 using System.Security.Policy;
21 using System.Security;
25 public sealed class AppDomain : MarshalByRefObject , _AppDomain , IEvidenceFactory {
27 IntPtr _mono_app_domain;
31 [MethodImplAttribute(MethodImplOptions.InternalCall)]
32 public extern AppDomainSetup getSetup ();
34 public AppDomainSetup SetupInformation {
41 public string BaseDirectory {
44 return SetupInformation.ApplicationBase;
48 public string RelativeSearchPath {
51 return SetupInformation.PrivateBinPath;
55 public string DynamicDirectory {
58 // fixme: dont know if this is right?
59 return SetupInformation.DynamicBase;
63 public bool ShadowCopyFiles {
66 if (SetupInformation.ShadowCopyFiles == "true")
72 [MethodImplAttribute(MethodImplOptions.InternalCall)]
73 public extern string getFriendlyName ();
75 public string FriendlyName {
78 return getFriendlyName ();
82 public Evidence Evidence {
90 [MethodImplAttribute (MethodImplOptions.InternalCall)]
91 private static extern AppDomain getCurDomain ();
93 public static AppDomain CurrentDomain
96 return getCurDomain ();
100 public void AppendPrivatePath (string path)
102 throw new NotImplementedException ();
105 public void ClearPrivatePath ()
107 throw new NotImplementedException ();
110 public void ClearShadowCopyPath ()
112 throw new NotImplementedException ();
115 public ObjectHandle CreateInstance (string assemblyName, string typeName)
117 return CreateInstance (assemblyName, typeName, false, 0,
118 null, null, null, null, null);
121 public ObjectHandle CreateInstance (string assemblyName, string typeName,
122 object[] activationAttributes)
124 return CreateInstance (assemblyName, typeName, false, 0,
125 null, null, null, activationAttributes, null);
128 public ObjectHandle CreateInstance (string assemblyName,
131 BindingFlags bindingAttr,
135 object[] activationAttributes,
136 Evidence securityAttribtutes)
138 throw new NotImplementedException ();
141 public ObjectHandle CreateInstanceFrom (string assemblyName, string typeName)
143 return CreateInstanceFrom (assemblyName, typeName, false, 0,
144 null, null, null, null, null);
147 public ObjectHandle CreateInstanceFrom (string assemblyName, string typeName,
148 object[] activationAttributes)
150 return CreateInstanceFrom (assemblyName, typeName, false, 0,
151 null, null, null, activationAttributes, null);
154 public ObjectHandle CreateInstanceFrom (string assemblyName,
157 BindingFlags bindingAttr,
161 object[] activationAttributes,
162 Evidence securityAttribtutes)
164 throw new NotImplementedException ();
167 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
168 AssemblyBuilderAccess access)
170 return DefineDynamicAssembly (name, access, null, null,
171 null, null, null, false);
174 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
175 AssemblyBuilderAccess access,
178 return DefineDynamicAssembly (name, access, null, evidence,
179 null, null, null, false);
182 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
183 AssemblyBuilderAccess access,
186 return DefineDynamicAssembly (name, access, dir, null,
187 null, null, null, false);
190 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
191 AssemblyBuilderAccess access,
195 return DefineDynamicAssembly (name, access, dir, evidence,
196 null, null, null, false);
199 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
200 AssemblyBuilderAccess access,
201 PermissionSet requiredPermissions,
202 PermissionSet optionalPermissions,
203 PermissionSet refusedPersmissions)
205 return DefineDynamicAssembly (name, access, null, null,
206 requiredPermissions, optionalPermissions,
207 refusedPersmissions, false);
210 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
211 AssemblyBuilderAccess access,
213 PermissionSet requiredPermissions,
214 PermissionSet optionalPermissions,
215 PermissionSet refusedPersmissions)
217 return DefineDynamicAssembly (name, access, null, evidence,
218 requiredPermissions, optionalPermissions,
219 refusedPersmissions, false);
222 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
223 AssemblyBuilderAccess access,
225 PermissionSet requiredPermissions,
226 PermissionSet optionalPermissions,
227 PermissionSet refusedPersmissions)
229 return DefineDynamicAssembly (name, access, dir, null,
230 requiredPermissions, optionalPermissions,
231 refusedPersmissions, false);
234 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
235 AssemblyBuilderAccess access,
238 PermissionSet requiredPermissions,
239 PermissionSet optionalPermissions,
240 PermissionSet refusedPersmissions)
242 return DefineDynamicAssembly (name, access, dir, evidence,
243 requiredPermissions, optionalPermissions,
244 refusedPersmissions, false);
248 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
249 AssemblyBuilderAccess access,
252 PermissionSet requiredPermissions,
253 PermissionSet optionalPermissions,
254 PermissionSet refusedPersmissions,
257 // FIXME: examine all other parameters
259 AssemblyBuilder ab = new AssemblyBuilder (name, access);
264 public void DoCallBack (CrossAppDomainDelegate theDelegate)
266 throw new NotImplementedException ();
269 public override bool Equals (object other)
271 if (!(other is AppDomain))
274 return this._mono_app_domain == ((AppDomain)other)._mono_app_domain;
277 public int ExecuteAssembly (string assemblyFile)
279 return ExecuteAssembly (assemblyFile, new Evidence (), null);
282 public int ExecuteAssembly (string assemblyFile, Evidence assemblySecurity)
284 return ExecuteAssembly (assemblyFile, new Evidence (), null);
287 [MethodImplAttribute(MethodImplOptions.InternalCall)]
288 public extern int ExecuteAssembly (string assemblyFile, Evidence assemblySecurity, string[] args);
290 [MethodImplAttribute(MethodImplOptions.InternalCall)]
291 public extern Assembly [] GetAssemblies ();
293 public object GetDate (string name)
295 throw new NotImplementedException ();
298 public override int GetHashCode ()
300 return (int)_mono_app_domain;
303 public object GetLifetimeService ()
305 throw new NotImplementedException ();
308 public object InitializeLifetimeService ()
310 throw new NotImplementedException ();
313 [MethodImplAttribute (MethodImplOptions.InternalCall)]
314 public extern Assembly LoadAssembly (AssemblyName assemblyRef, Evidence securityEvidence);
316 public Assembly Load (AssemblyName assemblyRef)
318 return Load (assemblyRef, new Evidence ());
321 public Assembly Load (AssemblyName assemblyRef, Evidence assemblySecurity)
323 return LoadAssembly (assemblyRef, assemblySecurity);
326 public Assembly Load (string assemblyString)
328 AssemblyName an = new AssemblyName ();
329 an.Name = assemblyString;
331 return Load (an, new Evidence ());
334 public Assembly Load (string assemblyString, Evidence assemblySecurity)
336 AssemblyName an = new AssemblyName ();
337 an.Name = assemblyString;
339 return Load (an, assemblySecurity);
342 public Assembly Load (byte[] rawAssembly)
344 return Load (rawAssembly, null, new Evidence ());
347 public Assembly Load (byte[] rawAssembly, byte[] rawSymbolStore)
349 return Load (rawAssembly, rawSymbolStore, new Evidence ());
352 public Assembly Load (byte[] rawAssembly, byte[] rawSymbolStore, Evidence securityEvidence)
354 throw new NotImplementedException ();
357 public void SetAppDomainPolicy (PolicyLevel domainPolicy)
359 throw new NotImplementedException ();
362 public void SetCachePath (string s)
364 SetupInformation.CachePath = s;
367 public void SetPrincipalPolicy (PrincipalPolicy policy)
369 throw new NotImplementedException ();
372 public void SetShadowCopyPath (string s)
374 throw new NotImplementedException ();
377 public void SetThreadPrincipal (IPrincipal principal)
379 throw new NotImplementedException ();
382 public static AppDomain CreateDomain (string friendlyName)
384 return CreateDomain (friendlyName, new Evidence (), new AppDomainSetup ());
387 public static AppDomain CreateDomain (string friendlyName, Evidence securityInfo)
389 return CreateDomain (friendlyName, securityInfo, new AppDomainSetup ());
392 [MethodImplAttribute (MethodImplOptions.InternalCall)]
393 private static extern AppDomain createDomain (string friendlyName, AppDomainSetup info);
395 public static AppDomain CreateDomain (string friendlyName,
396 Evidence securityInfo,
399 if (friendlyName == null || securityInfo == null || info == null)
400 throw new System.ArgumentNullException();
402 AppDomain ad = createDomain (friendlyName, info);
404 // ad.evidence = securityInfo;
409 public static AppDomain CreateDomain (string friendlyName, Evidence securityInfo,
410 string appBasePath, string appRelativeSearchPath,
411 bool shadowCopyFiles)
413 AppDomainSetup info = new AppDomainSetup ();
415 info.ApplicationBase = appBasePath;
416 info.PrivateBinPath = appRelativeSearchPath;
419 info.ShadowCopyFiles = "true";
421 info.ShadowCopyFiles = "false";
423 return CreateDomain (friendlyName, securityInfo, info);
427 [MethodImplAttribute(MethodImplOptions.InternalCall)]
428 public static extern void Unload (AppDomain domain);
430 [MethodImplAttribute(MethodImplOptions.InternalCall)]
431 public extern object GetData ();
433 [MethodImplAttribute(MethodImplOptions.InternalCall)]
434 public extern void SetData (string name, object data);
436 public static int GetCurrentThreadId ()
438 throw new NotImplementedException ();
442 public event AssemblyLoadEventHandler AssemblyLoad;
444 public event ResolveEventHandler AssemblyResolve;
446 public event EventHandler DomainUnload;
448 public event EventHandler ProcessExit;
450 public event ResolveEventHandler ResourceResolve;
452 public event ResolveEventHandler TypeResolve;
454 public event UnhandledExceptionEventHandler UnhandledException;