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 private AppDomain () {}
33 [MethodImplAttribute(MethodImplOptions.InternalCall)]
34 private extern AppDomainSetup getSetup ();
36 public AppDomainSetup SetupInformation {
43 public string BaseDirectory {
46 return SetupInformation.ApplicationBase;
50 public string RelativeSearchPath {
53 return SetupInformation.PrivateBinPath;
57 public string DynamicDirectory {
60 // fixme: dont know if this is right?
61 return SetupInformation.DynamicBase;
65 public bool ShadowCopyFiles {
68 if (SetupInformation.ShadowCopyFiles == "true")
74 [MethodImplAttribute(MethodImplOptions.InternalCall)]
75 private extern string getFriendlyName ();
77 public string FriendlyName {
80 return getFriendlyName ();
84 public Evidence Evidence {
92 [MethodImplAttribute (MethodImplOptions.InternalCall)]
93 private static extern AppDomain getCurDomain ();
95 public static AppDomain CurrentDomain
98 return getCurDomain ();
103 public void AppendPrivatePath (string path)
105 throw new NotImplementedException ();
109 public void ClearPrivatePath ()
111 throw new NotImplementedException ();
115 public void ClearShadowCopyPath ()
117 throw new NotImplementedException ();
120 public ObjectHandle CreateInstance (string assemblyName, string typeName)
122 return CreateInstance (assemblyName, typeName, false, 0,
123 null, null, null, null, null);
126 public ObjectHandle CreateInstance (string assemblyName, string typeName,
127 object[] activationAttributes)
129 return CreateInstance (assemblyName, typeName, false, 0,
130 null, null, null, activationAttributes, null);
134 public ObjectHandle CreateInstance (string assemblyName,
137 BindingFlags bindingAttr,
141 object[] activationAttributes,
142 Evidence securityAttribtutes)
144 throw new NotImplementedException ();
147 public ObjectHandle CreateInstanceFrom (string assemblyName, string typeName)
149 return CreateInstanceFrom (assemblyName, typeName, false, 0,
150 null, null, null, null, null);
153 public ObjectHandle CreateInstanceFrom (string assemblyName, string typeName,
154 object[] activationAttributes)
156 return CreateInstanceFrom (assemblyName, typeName, false, 0,
157 null, null, null, activationAttributes, null);
161 public ObjectHandle CreateInstanceFrom (string assemblyName,
164 BindingFlags bindingAttr,
168 object[] activationAttributes,
169 Evidence securityAttribtutes)
171 throw new NotImplementedException ();
174 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
175 AssemblyBuilderAccess access)
177 return DefineDynamicAssembly (name, access, null, null,
178 null, null, null, false);
181 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
182 AssemblyBuilderAccess access,
185 return DefineDynamicAssembly (name, access, null, evidence,
186 null, null, null, false);
189 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
190 AssemblyBuilderAccess access,
193 return DefineDynamicAssembly (name, access, dir, null,
194 null, null, null, false);
197 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
198 AssemblyBuilderAccess access,
202 return DefineDynamicAssembly (name, access, dir, evidence,
203 null, null, null, false);
206 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
207 AssemblyBuilderAccess access,
208 PermissionSet requiredPermissions,
209 PermissionSet optionalPermissions,
210 PermissionSet refusedPersmissions)
212 return DefineDynamicAssembly (name, access, null, null,
213 requiredPermissions, optionalPermissions,
214 refusedPersmissions, false);
217 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
218 AssemblyBuilderAccess access,
220 PermissionSet requiredPermissions,
221 PermissionSet optionalPermissions,
222 PermissionSet refusedPersmissions)
224 return DefineDynamicAssembly (name, access, null, evidence,
225 requiredPermissions, optionalPermissions,
226 refusedPersmissions, false);
229 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
230 AssemblyBuilderAccess access,
232 PermissionSet requiredPermissions,
233 PermissionSet optionalPermissions,
234 PermissionSet refusedPersmissions)
236 return DefineDynamicAssembly (name, access, dir, null,
237 requiredPermissions, optionalPermissions,
238 refusedPersmissions, false);
241 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
242 AssemblyBuilderAccess access,
245 PermissionSet requiredPermissions,
246 PermissionSet optionalPermissions,
247 PermissionSet refusedPersmissions)
249 return DefineDynamicAssembly (name, access, dir, evidence,
250 requiredPermissions, optionalPermissions,
251 refusedPersmissions, false);
255 public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
256 AssemblyBuilderAccess access,
259 PermissionSet requiredPermissions,
260 PermissionSet optionalPermissions,
261 PermissionSet refusedPersmissions,
264 // FIXME: examine all other parameters
266 AssemblyBuilder ab = new AssemblyBuilder (name, access);
272 public void DoCallBack (CrossAppDomainDelegate theDelegate)
274 throw new NotImplementedException ();
277 public override bool Equals (object other)
279 if (!(other is AppDomain))
282 return this._mono_app_domain == ((AppDomain)other)._mono_app_domain;
285 public int ExecuteAssembly (string assemblyFile)
287 return ExecuteAssembly (assemblyFile, new Evidence (), null);
290 public int ExecuteAssembly (string assemblyFile, Evidence assemblySecurity)
292 return ExecuteAssembly (assemblyFile, new Evidence (), null);
295 [MethodImplAttribute(MethodImplOptions.InternalCall)]
296 public extern int ExecuteAssembly (string assemblyFile, Evidence assemblySecurity, string[] args);
298 [MethodImplAttribute(MethodImplOptions.InternalCall)]
299 public extern Assembly [] GetAssemblies ();
302 public object GetData (string name)
304 throw new NotImplementedException ();
307 public override int GetHashCode ()
309 return (int)_mono_app_domain;
313 public override object InitializeLifetimeService ()
315 throw new NotImplementedException ();
318 [MethodImplAttribute (MethodImplOptions.InternalCall)]
319 private extern Assembly LoadAssembly (AssemblyName assemblyRef, Evidence securityEvidence);
321 public Assembly Load (AssemblyName assemblyRef)
323 return Load (assemblyRef, new Evidence ());
326 public Assembly Load (AssemblyName assemblyRef, Evidence assemblySecurity)
328 return LoadAssembly (assemblyRef, assemblySecurity);
331 public Assembly Load (string assemblyString)
333 AssemblyName an = new AssemblyName ();
334 an.Name = assemblyString;
336 return Load (an, new Evidence ());
339 public Assembly Load (string assemblyString, Evidence assemblySecurity)
341 AssemblyName an = new AssemblyName ();
342 an.Name = assemblyString;
344 return Load (an, assemblySecurity);
347 public Assembly Load (byte[] rawAssembly)
349 return Load (rawAssembly, null, new Evidence ());
352 public Assembly Load (byte[] rawAssembly, byte[] rawSymbolStore)
354 return Load (rawAssembly, rawSymbolStore, new Evidence ());
358 public Assembly Load (byte[] rawAssembly, byte[] rawSymbolStore, Evidence securityEvidence)
360 throw new NotImplementedException ();
364 public void SetAppDomainPolicy (PolicyLevel domainPolicy)
366 throw new NotImplementedException ();
369 public void SetCachePath (string s)
371 SetupInformation.CachePath = s;
375 public void SetPrincipalPolicy (PrincipalPolicy policy)
377 throw new NotImplementedException ();
381 public void SetShadowCopyPath (string s)
383 throw new NotImplementedException ();
387 public void SetThreadPrincipal (IPrincipal principal)
389 throw new NotImplementedException ();
392 public static AppDomain CreateDomain (string friendlyName)
394 return CreateDomain (friendlyName, new Evidence (), new AppDomainSetup ());
397 public static AppDomain CreateDomain (string friendlyName, Evidence securityInfo)
399 return CreateDomain (friendlyName, securityInfo, new AppDomainSetup ());
402 [MethodImplAttribute (MethodImplOptions.InternalCall)]
403 private static extern AppDomain createDomain (string friendlyName, AppDomainSetup info);
405 public static AppDomain CreateDomain (string friendlyName,
406 Evidence securityInfo,
409 if (friendlyName == null || securityInfo == null || info == null)
410 throw new System.ArgumentNullException();
412 AppDomain ad = createDomain (friendlyName, info);
414 // ad.evidence = securityInfo;
419 public static AppDomain CreateDomain (string friendlyName, Evidence securityInfo,
420 string appBasePath, string appRelativeSearchPath,
421 bool shadowCopyFiles)
423 AppDomainSetup info = new AppDomainSetup ();
425 info.ApplicationBase = appBasePath;
426 info.PrivateBinPath = appRelativeSearchPath;
429 info.ShadowCopyFiles = "true";
431 info.ShadowCopyFiles = "false";
433 return CreateDomain (friendlyName, securityInfo, info);
437 [MethodImplAttribute(MethodImplOptions.InternalCall)]
438 public static extern void Unload (AppDomain domain);
440 [MethodImplAttribute(MethodImplOptions.InternalCall)]
441 private extern object GetData ();
443 [MethodImplAttribute(MethodImplOptions.InternalCall)]
444 public extern void SetData (string name, object data);
447 public static int GetCurrentThreadId ()
449 throw new NotImplementedException ();
453 public event AssemblyLoadEventHandler AssemblyLoad;
455 public event ResolveEventHandler AssemblyResolve;
457 public event EventHandler DomainUnload;
459 public event EventHandler ProcessExit;
461 public event ResolveEventHandler ResourceResolve;
463 public event ResolveEventHandler TypeResolve;
465 public event UnhandledExceptionEventHandler UnhandledException;