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 ();
101 public void AppendPrivatePath (string path)
103 throw new NotImplementedException ();
107 public void ClearPrivatePath ()
109 throw new NotImplementedException ();
113 public void ClearShadowCopyPath ()
115 throw new NotImplementedException ();
118 public ObjectHandle CreateInstance (string assemblyName, string typeName)
120 return CreateInstance (assemblyName, typeName, false, 0,
121 null, null, null, null, null);
124 public ObjectHandle CreateInstance (string assemblyName, string typeName,
125 object[] activationAttributes)
127 return CreateInstance (assemblyName, typeName, false, 0,
128 null, null, null, activationAttributes, null);
132 public ObjectHandle CreateInstance (string assemblyName,
135 BindingFlags bindingAttr,
139 object[] activationAttributes,
140 Evidence securityAttribtutes)
142 throw new NotImplementedException ();
145 public ObjectHandle CreateInstanceFrom (string assemblyName, string typeName)
147 return CreateInstanceFrom (assemblyName, typeName, false, 0,
148 null, null, null, null, null);
151 public ObjectHandle CreateInstanceFrom (string assemblyName, string typeName,
152 object[] activationAttributes)
154 return CreateInstanceFrom (assemblyName, typeName, false, 0,
155 null, null, null, activationAttributes, null);
159 public ObjectHandle CreateInstanceFrom (string assemblyName,
162 BindingFlags bindingAttr,
166 object[] activationAttributes,
167 Evidence securityAttribtutes)
169 throw new NotImplementedException ();
172 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
173 AssemblyBuilderAccess access)
175 return DefineDynamicAssembly (name, access, null, null,
176 null, null, null, false);
179 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
180 AssemblyBuilderAccess access,
183 return DefineDynamicAssembly (name, access, null, evidence,
184 null, null, null, false);
187 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
188 AssemblyBuilderAccess access,
191 return DefineDynamicAssembly (name, access, dir, null,
192 null, null, null, false);
195 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
196 AssemblyBuilderAccess access,
200 return DefineDynamicAssembly (name, access, dir, evidence,
201 null, null, null, false);
204 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
205 AssemblyBuilderAccess access,
206 PermissionSet requiredPermissions,
207 PermissionSet optionalPermissions,
208 PermissionSet refusedPersmissions)
210 return DefineDynamicAssembly (name, access, null, null,
211 requiredPermissions, optionalPermissions,
212 refusedPersmissions, false);
215 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
216 AssemblyBuilderAccess access,
218 PermissionSet requiredPermissions,
219 PermissionSet optionalPermissions,
220 PermissionSet refusedPersmissions)
222 return DefineDynamicAssembly (name, access, null, evidence,
223 requiredPermissions, optionalPermissions,
224 refusedPersmissions, false);
227 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
228 AssemblyBuilderAccess access,
230 PermissionSet requiredPermissions,
231 PermissionSet optionalPermissions,
232 PermissionSet refusedPersmissions)
234 return DefineDynamicAssembly (name, access, dir, null,
235 requiredPermissions, optionalPermissions,
236 refusedPersmissions, false);
239 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
240 AssemblyBuilderAccess access,
243 PermissionSet requiredPermissions,
244 PermissionSet optionalPermissions,
245 PermissionSet refusedPersmissions)
247 return DefineDynamicAssembly (name, access, dir, evidence,
248 requiredPermissions, optionalPermissions,
249 refusedPersmissions, false);
253 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
254 AssemblyBuilderAccess access,
257 PermissionSet requiredPermissions,
258 PermissionSet optionalPermissions,
259 PermissionSet refusedPersmissions,
262 // FIXME: examine all other parameters
264 AssemblyBuilder ab = new AssemblyBuilder (name, access);
270 public void DoCallBack (CrossAppDomainDelegate theDelegate)
272 throw new NotImplementedException ();
275 public override bool Equals (object other)
277 if (!(other is AppDomain))
280 return this._mono_app_domain == ((AppDomain)other)._mono_app_domain;
283 public int ExecuteAssembly (string assemblyFile)
285 return ExecuteAssembly (assemblyFile, new Evidence (), null);
288 public int ExecuteAssembly (string assemblyFile, Evidence assemblySecurity)
290 return ExecuteAssembly (assemblyFile, new Evidence (), null);
293 [MethodImplAttribute(MethodImplOptions.InternalCall)]
294 public extern int ExecuteAssembly (string assemblyFile, Evidence assemblySecurity, string[] args);
296 [MethodImplAttribute(MethodImplOptions.InternalCall)]
297 public extern Assembly [] GetAssemblies ();
300 public object GetData (string name)
302 throw new NotImplementedException ();
305 public override int GetHashCode ()
307 return (int)_mono_app_domain;
311 public object GetLifetimeService ()
313 throw new NotImplementedException ();
317 public object InitializeLifetimeService ()
319 throw new NotImplementedException ();
322 [MethodImplAttribute (MethodImplOptions.InternalCall)]
323 public extern Assembly LoadAssembly (AssemblyName assemblyRef, Evidence securityEvidence);
325 public Assembly Load (AssemblyName assemblyRef)
327 return Load (assemblyRef, new Evidence ());
330 public Assembly Load (AssemblyName assemblyRef, Evidence assemblySecurity)
332 return LoadAssembly (assemblyRef, assemblySecurity);
335 public Assembly Load (string assemblyString)
337 AssemblyName an = new AssemblyName ();
338 an.Name = assemblyString;
340 return Load (an, new Evidence ());
343 public Assembly Load (string assemblyString, Evidence assemblySecurity)
345 AssemblyName an = new AssemblyName ();
346 an.Name = assemblyString;
348 return Load (an, assemblySecurity);
351 public Assembly Load (byte[] rawAssembly)
353 return Load (rawAssembly, null, new Evidence ());
356 public Assembly Load (byte[] rawAssembly, byte[] rawSymbolStore)
358 return Load (rawAssembly, rawSymbolStore, new Evidence ());
362 public Assembly Load (byte[] rawAssembly, byte[] rawSymbolStore, Evidence securityEvidence)
364 throw new NotImplementedException ();
368 public void SetAppDomainPolicy (PolicyLevel domainPolicy)
370 throw new NotImplementedException ();
373 public void SetCachePath (string s)
375 SetupInformation.CachePath = s;
379 public void SetPrincipalPolicy (PrincipalPolicy policy)
381 throw new NotImplementedException ();
385 public void SetShadowCopyPath (string s)
387 throw new NotImplementedException ();
391 public void SetThreadPrincipal (IPrincipal principal)
393 throw new NotImplementedException ();
396 public static AppDomain CreateDomain (string friendlyName)
398 return CreateDomain (friendlyName, new Evidence (), new AppDomainSetup ());
401 public static AppDomain CreateDomain (string friendlyName, Evidence securityInfo)
403 return CreateDomain (friendlyName, securityInfo, new AppDomainSetup ());
406 [MethodImplAttribute (MethodImplOptions.InternalCall)]
407 private static extern AppDomain createDomain (string friendlyName, AppDomainSetup info);
409 public static AppDomain CreateDomain (string friendlyName,
410 Evidence securityInfo,
413 if (friendlyName == null || securityInfo == null || info == null)
414 throw new System.ArgumentNullException();
416 AppDomain ad = createDomain (friendlyName, info);
418 // ad.evidence = securityInfo;
423 public static AppDomain CreateDomain (string friendlyName, Evidence securityInfo,
424 string appBasePath, string appRelativeSearchPath,
425 bool shadowCopyFiles)
427 AppDomainSetup info = new AppDomainSetup ();
429 info.ApplicationBase = appBasePath;
430 info.PrivateBinPath = appRelativeSearchPath;
433 info.ShadowCopyFiles = "true";
435 info.ShadowCopyFiles = "false";
437 return CreateDomain (friendlyName, securityInfo, info);
441 [MethodImplAttribute(MethodImplOptions.InternalCall)]
442 public static extern void Unload (AppDomain domain);
444 [MethodImplAttribute(MethodImplOptions.InternalCall)]
445 public extern object GetData ();
447 [MethodImplAttribute(MethodImplOptions.InternalCall)]
448 public extern void SetData (string name, object data);
451 public static int GetCurrentThreadId ()
453 throw new NotImplementedException ();
457 public event AssemblyLoadEventHandler AssemblyLoad;
459 public event ResolveEventHandler AssemblyResolve;
461 public event EventHandler DomainUnload;
463 public event EventHandler ProcessExit;
465 public event ResolveEventHandler ResourceResolve;
467 public event ResolveEventHandler TypeResolve;
469 public event UnhandledExceptionEventHandler UnhandledException;