5 // Paolo Molaro (lupus@ximian.com)
6 // Dietmar Maurer (dietmar@ximian.com)
7 // Miguel de Icaza (miguel@ximian.com)
8 // Gonzalo Paniagua (gonzalo@ximian.com)
10 // (C) 2001, 2002 Ximian, Inc. http://www.ximian.com
14 using System.Collections;
15 using System.Globalization;
16 using System.Reflection;
17 using System.Reflection.Emit;
18 using System.Runtime.CompilerServices;
19 using System.Runtime.Remoting;
20 using System.Security.Principal;
21 using System.Security.Policy;
22 using System.Security;
26 public sealed class AppDomain : MarshalByRefObject , _AppDomain , IEvidenceFactory {
28 IntPtr _mono_app_domain;
32 private AppDomain () {}
34 [MethodImplAttribute(MethodImplOptions.InternalCall)]
35 private extern AppDomainSetup getSetup ();
37 public AppDomainSetup SetupInformation {
44 public string BaseDirectory {
47 return SetupInformation.ApplicationBase;
51 public string RelativeSearchPath {
54 return SetupInformation.PrivateBinPath;
58 public string DynamicDirectory {
61 // fixme: dont know if this is right?
62 return SetupInformation.DynamicBase;
66 public bool ShadowCopyFiles {
69 if (SetupInformation.ShadowCopyFiles == "true")
75 [MethodImplAttribute(MethodImplOptions.InternalCall)]
76 private extern string getFriendlyName ();
78 public string FriendlyName {
81 return getFriendlyName ();
85 public Evidence Evidence {
93 [MethodImplAttribute (MethodImplOptions.InternalCall)]
94 private static extern AppDomain getCurDomain ();
96 public static AppDomain CurrentDomain
99 return getCurDomain ();
104 public void AppendPrivatePath (string path)
106 throw new NotImplementedException ();
110 public void ClearPrivatePath ()
112 throw new NotImplementedException ();
116 public void ClearShadowCopyPath ()
118 throw new NotImplementedException ();
121 public ObjectHandle CreateInstance (string assemblyName, string typeName)
123 if (assemblyName == null)
124 throw new ArgumentNullException ("assemblyName");
126 return Activator.CreateInstance (assemblyName, typeName);
129 public ObjectHandle CreateInstance (string assemblyName, string typeName,
130 object[] activationAttributes)
132 if (assemblyName == null)
133 throw new ArgumentNullException ("assemblyName");
135 return Activator.CreateInstance (assemblyName, typeName, activationAttributes);
138 public ObjectHandle CreateInstance (string assemblyName,
141 BindingFlags bindingAttr,
145 object[] activationAttributes,
146 Evidence securityAttributes)
148 if (assemblyName == null)
149 throw new ArgumentNullException ("assemblyName");
151 return Activator.CreateInstance (assemblyName,
158 activationAttributes,
162 public object CreateInstanceAndUnwrap (string assemblyName, string typeName)
164 ObjectHandle oh = CreateInstance (assemblyName, typeName);
165 return (oh != null) ? oh.Unwrap () : null;
168 public object CreateInstanceAndUnwrap (string assemblyName,
170 object [] activationAttributes)
172 ObjectHandle oh = CreateInstance (assemblyName, typeName, activationAttributes);
173 return (oh != null) ? oh.Unwrap () : null;
176 public object CreateInstanceAndUnwrap (string assemblyName,
179 BindingFlags bindingAttr,
183 object[] activationAttributes,
184 Evidence securityAttributes)
186 ObjectHandle oh = CreateInstance (assemblyName,
193 activationAttributes,
195 return (oh != null) ? oh.Unwrap () : null;
198 public ObjectHandle CreateInstanceFrom (string assemblyName, string typeName)
200 if (assemblyName == null)
201 throw new ArgumentNullException ("assemblyName");
203 return Activator.CreateInstanceFrom (assemblyName, typeName);
206 public ObjectHandle CreateInstanceFrom (string assemblyName, string typeName,
207 object[] activationAttributes)
209 if (assemblyName == null)
210 throw new ArgumentNullException ("assemblyName");
212 return Activator.CreateInstanceFrom (assemblyName, typeName, activationAttributes);
215 public ObjectHandle CreateInstanceFrom (string assemblyName,
218 BindingFlags bindingAttr,
222 object[] activationAttributes,
223 Evidence securityAttributes)
225 if (assemblyName == null)
226 throw new ArgumentNullException ("assemblyName");
228 return Activator.CreateInstanceFrom (assemblyName,
235 activationAttributes,
239 public object CreateInstanceFromAndUnwrap (string assemblyName, string typeName)
241 ObjectHandle oh = CreateInstanceFrom (assemblyName, typeName);
242 return (oh != null) ? oh.Unwrap () : null;
245 public object CreateInstanceFromAndUnwrap (string assemblyName,
247 object [] activationAttributes)
249 ObjectHandle oh = CreateInstanceFrom (assemblyName, typeName, activationAttributes);
250 return (oh != null) ? oh.Unwrap () : null;
253 public object CreateInstanceFromAndUnwrap (string assemblyName,
256 BindingFlags bindingAttr,
260 object[] activationAttributes,
261 Evidence securityAttributes)
263 ObjectHandle oh = CreateInstanceFrom (assemblyName,
270 activationAttributes,
272 return (oh != null) ? oh.Unwrap () : null;
275 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
276 AssemblyBuilderAccess access)
278 return DefineDynamicAssembly (name, access, null, null,
279 null, null, null, false);
282 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
283 AssemblyBuilderAccess access,
286 return DefineDynamicAssembly (name, access, null, evidence,
287 null, null, null, false);
290 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
291 AssemblyBuilderAccess access,
294 return DefineDynamicAssembly (name, access, dir, null,
295 null, null, null, false);
298 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
299 AssemblyBuilderAccess access,
303 return DefineDynamicAssembly (name, access, dir, evidence,
304 null, null, null, false);
307 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
308 AssemblyBuilderAccess access,
309 PermissionSet requiredPermissions,
310 PermissionSet optionalPermissions,
311 PermissionSet refusedPersmissions)
313 return DefineDynamicAssembly (name, access, null, null,
314 requiredPermissions, optionalPermissions,
315 refusedPersmissions, false);
318 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
319 AssemblyBuilderAccess access,
321 PermissionSet requiredPermissions,
322 PermissionSet optionalPermissions,
323 PermissionSet refusedPersmissions)
325 return DefineDynamicAssembly (name, access, null, evidence,
326 requiredPermissions, optionalPermissions,
327 refusedPersmissions, false);
330 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
331 AssemblyBuilderAccess access,
333 PermissionSet requiredPermissions,
334 PermissionSet optionalPermissions,
335 PermissionSet refusedPersmissions)
337 return DefineDynamicAssembly (name, access, dir, null,
338 requiredPermissions, optionalPermissions,
339 refusedPersmissions, false);
342 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
343 AssemblyBuilderAccess access,
346 PermissionSet requiredPermissions,
347 PermissionSet optionalPermissions,
348 PermissionSet refusedPersmissions)
350 return DefineDynamicAssembly (name, access, dir, evidence,
351 requiredPermissions, optionalPermissions,
352 refusedPersmissions, false);
356 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
357 AssemblyBuilderAccess access,
360 PermissionSet requiredPermissions,
361 PermissionSet optionalPermissions,
362 PermissionSet refusedPersmissions,
365 // FIXME: examine all other parameters
367 AssemblyBuilder ab = new AssemblyBuilder (name, dir, access);
373 public void DoCallBack (CrossAppDomainDelegate theDelegate)
375 throw new NotImplementedException ();
378 public override bool Equals (object other)
380 if (!(other is AppDomain))
383 return this._mono_app_domain == ((AppDomain)other)._mono_app_domain;
386 public int ExecuteAssembly (string assemblyFile)
388 return ExecuteAssembly (assemblyFile, new Evidence (), null);
391 public int ExecuteAssembly (string assemblyFile, Evidence assemblySecurity)
393 return ExecuteAssembly (assemblyFile, new Evidence (), null);
396 [MethodImplAttribute(MethodImplOptions.InternalCall)]
397 public extern int ExecuteAssembly (string assemblyFile, Evidence assemblySecurity, string[] args);
399 [MethodImplAttribute(MethodImplOptions.InternalCall)]
400 public extern Assembly [] GetAssemblies ();
402 [MethodImplAttribute(MethodImplOptions.InternalCall)]
403 public extern object GetData (string name);
405 public override int GetHashCode ()
407 return (int)_mono_app_domain;
411 public override object InitializeLifetimeService ()
413 throw new NotImplementedException ();
416 [MethodImplAttribute (MethodImplOptions.InternalCall)]
417 private extern Assembly LoadAssembly (AssemblyName assemblyRef, Evidence securityEvidence);
419 public Assembly Load (AssemblyName assemblyRef)
421 return Load (assemblyRef, new Evidence ());
424 public Assembly Load (AssemblyName assemblyRef, Evidence assemblySecurity)
426 return LoadAssembly (assemblyRef, assemblySecurity);
429 public Assembly Load (string assemblyString)
431 AssemblyName an = new AssemblyName ();
432 an.Name = assemblyString;
434 return Load (an, new Evidence ());
437 public Assembly Load (string assemblyString, Evidence assemblySecurity)
439 AssemblyName an = new AssemblyName ();
440 an.Name = assemblyString;
442 return Load (an, assemblySecurity);
445 public Assembly Load (byte[] rawAssembly)
447 return Load (rawAssembly, null, new Evidence ());
450 public Assembly Load (byte[] rawAssembly, byte[] rawSymbolStore)
452 return Load (rawAssembly, rawSymbolStore, new Evidence ());
456 public Assembly Load (byte[] rawAssembly, byte[] rawSymbolStore, Evidence securityEvidence)
458 throw new NotImplementedException ();
462 public void SetAppDomainPolicy (PolicyLevel domainPolicy)
464 throw new NotImplementedException ();
467 public void SetCachePath (string s)
469 SetupInformation.CachePath = s;
473 public void SetPrincipalPolicy (PrincipalPolicy policy)
475 throw new NotImplementedException ();
479 public void SetShadowCopyPath (string s)
481 throw new NotImplementedException ();
485 public void SetThreadPrincipal (IPrincipal principal)
487 throw new NotImplementedException ();
490 public static AppDomain CreateDomain (string friendlyName)
492 return CreateDomain (friendlyName, new Evidence (), new AppDomainSetup ());
495 public static AppDomain CreateDomain (string friendlyName, Evidence securityInfo)
497 return CreateDomain (friendlyName, securityInfo, new AppDomainSetup ());
500 [MethodImplAttribute (MethodImplOptions.InternalCall)]
501 private static extern AppDomain createDomain (string friendlyName, AppDomainSetup info);
503 public static AppDomain CreateDomain (string friendlyName,
504 Evidence securityInfo,
507 if (friendlyName == null)
508 throw new System.ArgumentNullException ("friendlyName");
510 if (securityInfo == null)
511 throw new System.ArgumentNullException ("securityInfo");
514 throw new System.ArgumentNullException ("info");
516 AppDomain ad = createDomain (friendlyName, info);
518 // ad.evidence = securityInfo;
523 public static AppDomain CreateDomain (string friendlyName, Evidence securityInfo,
524 string appBasePath, string appRelativeSearchPath,
525 bool shadowCopyFiles)
527 AppDomainSetup info = new AppDomainSetup ();
529 info.ApplicationBase = appBasePath;
530 info.PrivateBinPath = appRelativeSearchPath;
533 info.ShadowCopyFiles = "true";
535 info.ShadowCopyFiles = "false";
537 return CreateDomain (friendlyName, securityInfo, info);
541 [MethodImplAttribute(MethodImplOptions.InternalCall)]
542 public static extern void Unload (AppDomain domain);
544 [MethodImplAttribute(MethodImplOptions.InternalCall)]
545 public extern void SetData (string name, object data);
548 public static int GetCurrentThreadId ()
550 throw new NotImplementedException ();
554 public event AssemblyLoadEventHandler AssemblyLoad;
556 public event ResolveEventHandler AssemblyResolve;
558 public event EventHandler DomainUnload;
560 public event EventHandler ProcessExit;
562 public event ResolveEventHandler ResourceResolve;
564 public event ResolveEventHandler TypeResolve;
566 public event UnhandledExceptionEventHandler UnhandledException;