using System.Security.Principal;
using System.Configuration.Assemblies;
-#if NET_2_0
using System.Collections.Generic;
using System.Runtime.ConstrainedExecution;
-#endif
+using System.Text;
namespace System {
-#if NET_2_0
[ComVisible (true)]
+#if !NET_2_1
[ComDefaultInterface (typeof (_AppDomain))]
#endif
[ClassInterface(ClassInterfaceType.None)]
- public sealed class AppDomain : MarshalByRefObject , _AppDomain , IEvidenceFactory
- {
+#if NET_2_1
+ public sealed class AppDomain : MarshalByRefObject {
+#else
+ public sealed class AppDomain : MarshalByRefObject, _AppDomain, IEvidenceFactory {
+#endif
+ #pragma warning disable 169
+ #region Sync with object-internals.h
IntPtr _mono_app_domain;
+ #endregion
+ #pragma warning restore 169
static string _process_guid;
[ThreadStatic]
[ThreadStatic]
static Hashtable assembly_resolve_in_progress;
+ [ThreadStatic]
+ static Hashtable assembly_resolve_in_progress_refonly;
+#if !MOONLIGHT
// CAS
private Evidence _evidence;
private PermissionSet _granted;
[ThreadStatic]
private static IPrincipal _principal;
-
+#endif
static AppDomain default_domain;
private AppDomain ()
[MethodImplAttribute (MethodImplOptions.InternalCall)]
private extern AppDomainSetup getSetup ();
+#if NET_2_1
+ internal
+#endif
AppDomainSetup SetupInformationNoCopy {
get { return getSetup (); }
}
}
}
-#if NET_2_0
+#if !NET_2_1
[MonoTODO]
public ApplicationTrust ApplicationTrust {
get { throw new NotImplementedException (); }
}
#endif
-
+#if !MOONLIGHT
public string BaseDirectory {
get {
string path = SetupInformationNoCopy.ApplicationBase;
return (SetupInformationNoCopy.ShadowCopyFiles == "true");
}
}
+#endif
[MethodImplAttribute (MethodImplOptions.InternalCall)]
private extern string getFriendlyName ();
return getFriendlyName ();
}
}
-
+#if !MOONLIGHT
public Evidence Evidence {
get {
// if the host (runtime) hasn't provided it's own evidence...
internal PermissionSet GrantedPermissionSet {
get { return _granted; }
}
-
+#endif
[MethodImplAttribute (MethodImplOptions.InternalCall)]
private static extern AppDomain getCurDomain ();
}
}
-#if NET_2_0
+#if !MOONLIGHT
+
[Obsolete ("AppDomain.AppendPrivatePath has been deprecated. Please investigate the use of AppDomainSetup.PrivateBinPath instead.")]
-#endif
[SecurityPermission (SecurityAction.LinkDemand, ControlAppDomain = true)]
public void AppendPrivatePath (string path)
{
setup.PrivateBinPath = pp + path;
}
-#if NET_2_0
[Obsolete ("AppDomain.ClearPrivatePath has been deprecated. Please investigate the use of AppDomainSetup.PrivateBinPath instead.")]
-#endif
[SecurityPermission (SecurityAction.LinkDemand, ControlAppDomain = true)]
public void ClearPrivatePath ()
{
SetupInformationNoCopy.PrivateBinPath = String.Empty;
}
-#if NET_2_0
[Obsolete ("Use AppDomainSetup.ShadowCopyDirectories")]
-#endif
[SecurityPermission (SecurityAction.LinkDemand, ControlAppDomain = true)]
public void ClearShadowCopyPath ()
{
SetupInformationNoCopy.ShadowCopyDirectories = String.Empty;
}
+#if !NET_2_1
public ObjectHandle CreateComInstanceFrom (string assemblyName, string typeName)
{
return Activator.CreateComInstanceFrom (assemblyName, typeName);
}
-#if NET_1_1
public ObjectHandle CreateComInstanceFrom (string assemblyFile, string typeName,
byte [] hashValue, AssemblyHashAlgorithm hashAlgorithm)
{
return Activator.CreateInstance (assemblyName, typeName, activationAttributes);
}
+#if NET_4_0
+ [Obsolete ("Use an overload that does not take an Evidence parameter")]
+#endif
public ObjectHandle CreateInstance (string assemblyName, string typeName, bool ignoreCase, BindingFlags bindingAttr,
Binder binder, object[] args, CultureInfo culture, object[] activationAttributes,
Evidence securityAttributes)
return (oh != null) ? oh.Unwrap () : null;
}
+#if NET_4_0
+ [Obsolete ("Use an overload that does not take an Evidence parameter")]
+#endif
public object CreateInstanceAndUnwrap (string assemblyName, string typeName, bool ignoreCase,
BindingFlags bindingAttr, Binder binder, object[] args, CultureInfo culture,
object[] activationAttributes, Evidence securityAttributes)
return (oh != null) ? oh.Unwrap () : null;
}
+#if NET_4_0
+ public ObjectHandle CreateInstance (string assemblyName, string typeName, bool ignoreCase, BindingFlags bindingAttr,
+ Binder binder, object[] args, CultureInfo culture, object[] activationAttributes)
+ {
+ if (assemblyName == null)
+ throw new ArgumentNullException ("assemblyName");
+
+ return Activator.CreateInstance (assemblyName, typeName, ignoreCase, bindingAttr, binder, args,
+ culture, activationAttributes, null);
+ }
+ public object CreateInstanceAndUnwrap (string assemblyName, string typeName, bool ignoreCase,
+ BindingFlags bindingAttr, Binder binder, object[] args, CultureInfo culture,
+ object[] activationAttributes)
+ {
+ ObjectHandle oh = CreateInstance (assemblyName, typeName, ignoreCase, bindingAttr, binder, args,
+ culture, activationAttributes);
+ return (oh != null) ? oh.Unwrap () : null;
+ }
+
+ public ObjectHandle CreateInstanceFrom (string assemblyFile, string typeName, bool ignoreCase,
+ BindingFlags bindingAttr, Binder binder, object[] args, CultureInfo culture,
+ object[] activationAttributes)
+ {
+ if (assemblyFile == null)
+ throw new ArgumentNullException ("assemblyFile");
+
+ return Activator.CreateInstanceFrom (assemblyFile, typeName, ignoreCase, bindingAttr, binder, args,
+ culture, activationAttributes, null);
+ }
+
+ public object CreateInstanceFromAndUnwrap (string assemblyName, string typeName, bool ignoreCase,
+ BindingFlags bindingAttr, Binder binder, object[] args,
+ CultureInfo culture, object[] activationAttributes)
+ {
+ ObjectHandle oh = CreateInstanceFrom (assemblyName, typeName, ignoreCase, bindingAttr, binder, args,
+ culture, activationAttributes);
+
+ return (oh != null) ? oh.Unwrap () : null;
+ }
+#endif
+
public ObjectHandle CreateInstanceFrom (string assemblyFile, string typeName)
{
if (assemblyFile == null)
return Activator.CreateInstanceFrom (assemblyFile, typeName, activationAttributes);
}
+#if NET_4_0
+ [Obsolete ("Use an overload that does not take an Evidence parameter")]
+#endif
public ObjectHandle CreateInstanceFrom (string assemblyFile, string typeName, bool ignoreCase,
BindingFlags bindingAttr, Binder binder, object[] args, CultureInfo culture,
object[] activationAttributes, Evidence securityAttributes)
return (oh != null) ? oh.Unwrap () : null;
}
+#if NET_4_0
+ [Obsolete ("Use an overload that does not take an Evidence parameter")]
+#endif
public object CreateInstanceFromAndUnwrap (string assemblyName, string typeName, bool ignoreCase,
BindingFlags bindingAttr, Binder binder, object[] args,
CultureInfo culture, object[] activationAttributes,
return (oh != null) ? oh.Unwrap () : null;
}
+#endif // !NET_2_1
+
public AssemblyBuilder DefineDynamicAssembly (AssemblyName name, AssemblyBuilderAccess access)
{
return DefineDynamicAssembly (name, access, null, null, null, null, null, false);
}
+#if NET_4_0
+ [Obsolete ("Declarative security for assembly level is no longer enforced")]
+#endif
public AssemblyBuilder DefineDynamicAssembly (AssemblyName name, AssemblyBuilderAccess access, Evidence evidence)
{
return DefineDynamicAssembly (name, access, null, evidence, null, null, null, false);
return DefineDynamicAssembly (name, access, dir, null, null, null, null, false);
}
+#if NET_4_0
+ [Obsolete ("Declarative security for assembly level is no longer enforced")]
+#endif
public AssemblyBuilder DefineDynamicAssembly (AssemblyName name, AssemblyBuilderAccess access, string dir,
Evidence evidence)
{
return DefineDynamicAssembly (name, access, dir, evidence, null, null, null, false);
}
+#if NET_4_0
+ [Obsolete ("Declarative security for assembly level is no longer enforced")]
+#endif
public AssemblyBuilder DefineDynamicAssembly (AssemblyName name, AssemblyBuilderAccess access,
PermissionSet requiredPermissions,
PermissionSet optionalPermissions,
refusedPermissions, false);
}
+#if NET_4_0
+ [Obsolete ("Declarative security for assembly level is no longer enforced")]
+#endif
public AssemblyBuilder DefineDynamicAssembly (AssemblyName name, AssemblyBuilderAccess access, Evidence evidence,
PermissionSet requiredPermissions,
PermissionSet optionalPermissions,
refusedPermissions, false);
}
+#if NET_4_0
+ [Obsolete ("Declarative security for assembly level is no longer enforced")]
+#endif
public AssemblyBuilder DefineDynamicAssembly (AssemblyName name, AssemblyBuilderAccess access, string dir,
PermissionSet requiredPermissions,
PermissionSet optionalPermissions,
refusedPermissions, false);
}
+#if NET_4_0
+ [Obsolete ("Declarative security for assembly level is no longer enforced")]
+#endif
public AssemblyBuilder DefineDynamicAssembly (AssemblyName name, AssemblyBuilderAccess access, string dir,
Evidence evidence,
PermissionSet requiredPermissions,
refusedPermissions, false);
}
+#if NET_4_0
+ [Obsolete ("Declarative security for assembly level is no longer enforced")]
+#endif
public AssemblyBuilder DefineDynamicAssembly (AssemblyName name, AssemblyBuilderAccess access, string dir,
Evidence evidence,
PermissionSet requiredPermissions,
return ab;
}
-#if NET_2_0
// NET 3.5 method
+#if NET_4_0
+ [Obsolete ("Declarative security for assembly level is no longer enforced")]
+#endif
public AssemblyBuilder DefineDynamicAssembly (AssemblyName name, AssemblyBuilderAccess access, string dir,
Evidence evidence,
PermissionSet requiredPermissions,
public AssemblyBuilder DefineDynamicAssembly (AssemblyName name, AssemblyBuilderAccess access, IEnumerable<CustomAttributeBuilder> assemblyAttributes) {
return DefineDynamicAssembly (name, access, null, null, null, null, null, false, assemblyAttributes);
}
-#endif
-
-#if NET_2_1
- // TODO: the last parameter is ignored for now
- public AssemblyBuilder DefineDynamicAssembly (AssemblyName name, AssemblyBuilderAccess access, bool emitSymbolInfo)
- {
- return DefineDynamicAssembly (name, access, null, null, null, null, null, false);
- }
-#endif
internal AssemblyBuilder DefineInternalDynamicAssembly (AssemblyName name, AssemblyBuilderAccess access)
{
public int ExecuteAssembly (string assemblyFile)
{
- return ExecuteAssembly (assemblyFile, null, null);
+ return ExecuteAssembly (assemblyFile, (Evidence)null, null);
}
+#if NET_4_0
+ [Obsolete ("Use an overload that does not take an Evidence parameter")]
+#endif
public int ExecuteAssembly (string assemblyFile, Evidence assemblySecurity)
{
return ExecuteAssembly (assemblyFile, assemblySecurity, null);
}
+#if NET_4_0
+ [Obsolete ("Use an overload that does not take an Evidence parameter")]
+#endif
public int ExecuteAssembly (string assemblyFile, Evidence assemblySecurity, string[] args)
{
Assembly a = Assembly.LoadFrom (assemblyFile, assemblySecurity);
return ExecuteAssemblyInternal (a, args);
}
+#if NET_4_0
+ [Obsolete ("Use an overload that does not take an Evidence parameter")]
+#endif
public int ExecuteAssembly (string assemblyFile, Evidence assemblySecurity, string[] args, byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm)
{
Assembly a = Assembly.LoadFrom (assemblyFile, assemblySecurity, hashValue, hashAlgorithm);
return ExecuteAssemblyInternal (a, args);
}
+
+#if NET_4_0
+ public int ExecuteAssembly (string assemblyFile, string[] args)
+ {
+ Assembly a = Assembly.LoadFrom (assemblyFile, null);
+ return ExecuteAssemblyInternal (a, args);
+ }
+
+ public int ExecuteAssembly (string assemblyFile, string[] args, byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm)
+ {
+ Assembly a = Assembly.LoadFrom (assemblyFile, null, hashValue, hashAlgorithm);
+ return ExecuteAssemblyInternal (a, args);
+ }
+#endif
+
int ExecuteAssemblyInternal (Assembly a, string[] args)
{
if (a.EntryPoint == null)
-#if NET_2_0
throw new MissingMethodException ("Entry point not found in assembly '" + a.FullName + "'.");
-#else
- throw new COMException ("Unspecified error.", -2147467259);
-#endif
return ExecuteAssembly (a, args);
}
return Load (assemblyRef, null);
}
+ internal Assembly LoadSatellite (AssemblyName assemblyRef, bool throwOnError)
+ {
+ if (assemblyRef == null)
+ throw new ArgumentNullException ("assemblyRef");
+
+ Assembly result = LoadAssembly (assemblyRef.FullName, null, false);
+ if (result == null && throwOnError)
+ throw new FileNotFoundException (null, assemblyRef.Name);
+ return result;
+ }
+
+#if NET_4_0
+ [Obsolete ("Use an overload that does not take an Evidence parameter")]
+#endif
public Assembly Load (AssemblyName assemblyRef, Evidence assemblySecurity)
{
if (assemblyRef == null)
throw new ArgumentException (Locale.GetText ("assemblyRef.Name cannot be empty."), "assemblyRef");
}
- return LoadAssembly (assemblyRef.FullName, assemblySecurity, false);
+ Assembly assembly = LoadAssembly (assemblyRef.FullName, assemblySecurity, false);
+ if (assembly != null)
+ return assembly;
+
+ if (assemblyRef.CodeBase == null)
+ throw new FileNotFoundException (null, assemblyRef.Name);
+
+ string cb = assemblyRef.CodeBase;
+ if (cb.ToLower (CultureInfo.InvariantCulture).StartsWith ("file://"))
+ cb = new Mono.Security.Uri (cb).LocalPath;
+
+ try {
+ assembly = Assembly.LoadFrom (cb, assemblySecurity);
+ } catch {
+ throw new FileNotFoundException (null, assemblyRef.Name);
+ }
+ AssemblyName aname = assembly.GetName ();
+ // Name, version, culture, publickeytoken. Anything else?
+ if (assemblyRef.Name != aname.Name)
+ throw new FileNotFoundException (null, assemblyRef.Name);
+
+ if (assemblyRef.Version != new Version () && assemblyRef.Version != aname.Version)
+ throw new FileNotFoundException (null, assemblyRef.Name);
+
+ if (assemblyRef.CultureInfo != null && assemblyRef.CultureInfo.Equals (aname))
+ throw new FileNotFoundException (null, assemblyRef.Name);
+
+ byte [] pt = assemblyRef.GetPublicKeyToken ();
+ if (pt != null) {
+ byte [] loaded_pt = aname.GetPublicKeyToken ();
+ if (loaded_pt == null || (pt.Length != loaded_pt.Length))
+ throw new FileNotFoundException (null, assemblyRef.Name);
+ for (int i = pt.Length - 1; i >= 0; i--)
+ if (loaded_pt [i] != pt [i])
+ throw new FileNotFoundException (null, assemblyRef.Name);
+ }
+ return assembly;
}
public Assembly Load (string assemblyString)
return Load (assemblyString, null, false);
}
+#if NET_4_0
+ [Obsolete ("Use an overload that does not take an Evidence parameter")]
+#endif
public Assembly Load (string assemblyString, Evidence assemblySecurity)
{
return Load (assemblyString, assemblySecurity, false);
if (assemblyString.Length == 0)
throw new ArgumentException ("assemblyString cannot have zero length");
- return LoadAssembly (assemblyString, assemblySecurity, refonly);
+ Assembly assembly = LoadAssembly (assemblyString, assemblySecurity, refonly);
+ if (assembly == null)
+ throw new FileNotFoundException (null, assemblyString);
+ return assembly;
}
public Assembly Load (byte[] rawAssembly)
[MethodImplAttribute (MethodImplOptions.InternalCall)]
internal extern Assembly LoadAssemblyRaw (byte[] rawAssembly, byte[] rawSymbolStore, Evidence securityEvidence, bool refonly);
+#if NET_4_0
+ [Obsolete ("Use an overload that does not take an Evidence parameter")]
+#endif
public Assembly Load (byte[] rawAssembly, byte[] rawSymbolStore, Evidence securityEvidence)
{
return Load (rawAssembly, rawSymbolStore, securityEvidence, false);
assembly.FromByteArray = true;
return assembly;
}
-
+#if !MOONLIGHT
+#if NET_4_0
+ [Obsolete ("AppDomain policy levels are obsolete")]
+#endif
[SecurityPermission (SecurityAction.Demand, ControlPolicy = true)]
public void SetAppDomainPolicy (PolicyLevel domainPolicy)
{
_granted = ps.PermissionSet;
}
-#if NET_2_0
[Obsolete ("Use AppDomainSetup.SetCachePath")]
-#endif
[SecurityPermission (SecurityAction.LinkDemand, ControlAppDomain = true)]
public void SetCachePath (string path)
{
_principal = null;
}
-#if NET_2_0
[Obsolete ("Use AppDomainSetup.ShadowCopyFiles")]
-#endif
[SecurityPermission (SecurityAction.LinkDemand, ControlAppDomain = true)]
public void SetShadowCopyFiles()
{
SetupInformationNoCopy.ShadowCopyFiles = "true";
}
-#if NET_2_0
[Obsolete ("Use AppDomainSetup.ShadowCopyDirectories")]
-#endif
[SecurityPermission (SecurityAction.LinkDemand, ControlAppDomain = true)]
public void SetShadowCopyPath (string path)
{
_principal = principal;
}
-
+#endif
[MethodImplAttribute (MethodImplOptions.InternalCall)]
private static extern AppDomain InternalSetDomainByID (int domain_id);
return _process_guid;
}
+#if !MOONLIGHT
+
public static AppDomain CreateDomain (string friendlyName)
{
return CreateDomain (friendlyName, null, null);
[MethodImplAttribute (MethodImplOptions.InternalCall)]
private static extern AppDomain createDomain (string friendlyName, AppDomainSetup info);
- [MonoTODO ("Currently it does not allow the setup in the other domain")]
+ [MonoLimitationAttribute ("Currently it does not allow the setup in the other domain")]
[SecurityPermission (SecurityAction.Demand, ControlAppDomain = true)]
public static AppDomain CreateDomain (string friendlyName, Evidence securityInfo, AppDomainSetup info)
{
} else if (info.ConfigurationFile == null)
info.ConfigurationFile = "[I don't have a config file]";
+#if !NET_2_1
+ if (info.AppDomainInitializer != null) {
+ if (!info.AppDomainInitializer.Method.IsStatic)
+ throw new ArgumentException ("Non-static methods cannot be invoked as an appdomain initializer");
+ }
+#endif
+
+ info.SerializeNonPrimitives ();
+
AppDomain ad = (AppDomain) RemotingServices.GetDomainProxy (createDomain (friendlyName, info));
if (securityInfo == null) {
// get default domain's Evidence (unless we're are the default!)
else
ad._evidence = new Evidence (securityInfo); // copy
-#if NET_2_0
+#if !NET_2_1
if (info.AppDomainInitializer != null) {
- if ((info.AppDomainInitializer.Method.Attributes & MethodAttributes.Static) == 0)
- throw new ArgumentException ("Non-static methods cannot be invoked as an appdomain initializer");
- info.AppDomainInitializer (info.AppDomainInitializerArguments);
+ Loader loader = new Loader (
+ info.AppDomainInitializer.Method.DeclaringType.Assembly.Location);
+ ad.DoCallBack (loader.Load);
+
+ Initializer initializer = new Initializer (
+ info.AppDomainInitializer,
+ info.AppDomainInitializerArguments);
+ ad.DoCallBack (initializer.Initialize);
}
#endif
return ad;
}
+#if !NET_2_1
+ [Serializable]
+ class Loader {
+
+ string assembly;
+
+ public Loader (string assembly)
+ {
+ this.assembly = assembly;
+ }
+
+ public void Load ()
+ {
+ Assembly.LoadFrom (assembly);
+ }
+ }
+
+ [Serializable]
+ class Initializer {
+
+ AppDomainInitializer initializer;
+ string [] arguments;
+
+ public Initializer (AppDomainInitializer initializer, string [] arguments)
+ {
+ this.initializer = initializer;
+ this.arguments = arguments;
+ }
+
+ public void Initialize ()
+ {
+ initializer (arguments);
+ }
+ }
+#endif
+
public static AppDomain CreateDomain (string friendlyName, Evidence securityInfo,string appBasePath,
string appRelativeSearchPath, bool shadowCopyFiles)
{
return CreateDomain (friendlyName, securityInfo, CreateDomainSetup (appBasePath, appRelativeSearchPath, shadowCopyFiles));
}
+
+#if !NET_2_1
+ public static AppDomain CreateDomain (string friendlyName, Evidence securityInfo, AppDomainSetup info,
+ PermissionSet grantSet, params StrongName [] fullTrustAssemblies)
+ {
+ if (info == null)
+ throw new ArgumentNullException ("info");
+
+ info.ApplicationTrust = new ApplicationTrust (grantSet, fullTrustAssemblies ?? new StrongName [0]);
+ return CreateDomain (friendlyName, securityInfo, info);
+ }
+#endif
static AppDomainSetup CreateDomainSetup (string appBasePath, string appRelativeSearchPath, bool shadowCopyFiles)
{
return info;
}
-
-#if NET_2_0
- [MonoTODO]
- public static AppDomain CreateDomain (string friendlyName, Evidence securityInfo, AppDomainSetup info,
- PermissionSet grantSet, params StrongName [] fullTrustAssemblies)
- {
- throw new NotImplementedException ();
- }
-#endif
+#endif // !NET_2_1
[MethodImplAttribute (MethodImplOptions.InternalCall)]
private static extern bool InternalIsFinalizingForUnload (int domain_id);
}
[SecurityPermission (SecurityAction.Demand, ControlAppDomain = true)]
-#if NET_2_0
[ReliabilityContractAttribute (Consistency.MayCorruptAppDomain, Cer.MayFail)]
-#endif
public static void Unload (AppDomain domain)
{
if (domain == null)
[SecurityPermission (SecurityAction.LinkDemand, ControlAppDomain = true)]
public extern void SetData (string name, object data);
-#if NET_2_0
- [MonoTODO]
+ [MonoLimitation ("The permission field is ignored")]
public void SetData (string name, object data, IPermission permission)
{
- throw new NotImplementedException ();
+ SetData (name, data);
}
-#endif
-#if NET_2_0
+#if !NET_2_1
[Obsolete ("Use AppDomainSetup.DynamicBase")]
-#endif
[SecurityPermission (SecurityAction.LinkDemand, ControlAppDomain = true)]
public void SetDynamicBase (string path)
{
SetupInformationNoCopy.DynamicBase = path;
}
+#endif // !NET_2_1
-#if NET_2_0
[Obsolete ("AppDomain.GetCurrentThreadId has been deprecated"
+ " because it does not provide a stable Id when managed"
+ " threads are running on fibers (aka lightweight"
+ " threads). To get a stable identifier for a managed"
+ " thread, use the ManagedThreadId property on Thread.'")]
-#endif
public static int GetCurrentThreadId ()
{
return Thread.CurrentThreadId;
public override string ToString ()
{
+#if !MOONLIGHT
return getFriendlyName ();
+#else
+ StringBuilder sb = new StringBuilder ("Name:");
+ sb.AppendLine (FriendlyName);
+ sb.AppendLine ("There are no context policies.");
+ return sb.ToString ();
+#endif
}
private static void ValidateAssemblyName (string name)
private Assembly DoAssemblyResolve (string name, bool refonly)
{
ResolveEventHandler del;
-#if NET_2_0
+#if !NET_2_1
if (refonly)
del = ReflectionOnlyAssemblyResolve;
else
return null;
/* Prevent infinite recursion */
- Hashtable ht = assembly_resolve_in_progress;
- if (ht == null) {
- ht = new Hashtable ();
- assembly_resolve_in_progress = ht;
+ Hashtable ht;
+ if (refonly) {
+ ht = assembly_resolve_in_progress_refonly;
+ if (ht == null) {
+ ht = new Hashtable ();
+ assembly_resolve_in_progress_refonly = ht;
+ }
+ } else {
+ ht = assembly_resolve_in_progress;
+ if (ht == null) {
+ ht = new Hashtable ();
+ assembly_resolve_in_progress = ht;
+ }
}
- Assembly ass = (Assembly) ht [name];
-#if NET_2_0
- if (ass != null && (ass.ReflectionOnly == refonly))
- return null;
-#else
- if (ass != null)
+ string s = (string) ht [name];
+ if (s != null)
return null;
-#endif
ht [name] = name;
try {
Delegate[] invocation_list = del.GetInvocationList ();
DomainUnload(this, null);
}
+#if !NET_2_1
internal byte[] GetMarshalledDomainObjRef ()
{
ObjRef oref = RemotingServices.Marshal (AppDomain.CurrentDomain, null, typeof (AppDomain));
return CADSerializer.SerializeObject (oref).GetBuffer();
}
-
+#endif
internal void ProcessMessageInDomain (byte[] arrRequest, CADMethodCallMessage cadMsg,
out byte[] arrResponse, out CADMethodReturnMessage cadMrm)
{
else
arrResponse = null;
}
+
#pragma warning restore 169
// End of methods called from the runtime
-#if BOOTSTRAP_WITH_OLDLIB
- // older MCS/corlib returns:
- // _AppDomain.cs(138) error CS0592: Attribute 'SecurityPermission' is not valid on this declaration type.
- // It is valid on 'assembly' 'class' 'constructor' 'method' 'struct' declarations only.
- public event AssemblyLoadEventHandler AssemblyLoad;
-
- public event ResolveEventHandler AssemblyResolve;
-
- public event EventHandler DomainUnload;
-
- public event EventHandler ProcessExit;
-
- public event ResolveEventHandler ResourceResolve;
-
- public event ResolveEventHandler TypeResolve;
-
- public event UnhandledExceptionEventHandler UnhandledException;
-#else
[method: SecurityPermission (SecurityAction.LinkDemand, ControlAppDomain = true)]
public event AssemblyLoadEventHandler AssemblyLoad;
[method: SecurityPermission (SecurityAction.LinkDemand, ControlAppDomain = true)]
public event UnhandledExceptionEventHandler UnhandledException;
+
+#if NET_4_0 || BOOTSTRAP_NET_4_0
+ [MonoTODO]
+ public bool IsHomogenous {
+ get { return true; }
+ }
#endif
-#if NET_2_0
+ #pragma warning disable 649
+ private AppDomainManager _domain_manager;
+ #pragma warning restore 649
+
+ // default is null
+ public AppDomainManager DomainManager {
+ get { return _domain_manager; }
+ }
+
+#if (!MOONLIGHT)
public event ResolveEventHandler ReflectionOnlyAssemblyResolve;
-
+
+ #pragma warning disable 649
private ActivationContext _activation;
private ApplicationIdentity _applicationIdentity;
- private AppDomainManager _domain_manager;
+ #pragma warning restore 649
// properties
get { return _applicationIdentity; }
}
- // default is null
- public AppDomainManager DomainManager {
- get { return _domain_manager; }
- }
-
public int Id {
[ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
get { return getDomainID (); }
public int ExecuteAssemblyByName (string assemblyName)
{
- return ExecuteAssemblyByName (assemblyName, null, null);
+ return ExecuteAssemblyByName (assemblyName, (Evidence)null, null);
}
+#if NET_4_0
+ [Obsolete ("Use an overload that does not take an Evidence parameter")]
+#endif
public int ExecuteAssemblyByName (string assemblyName, Evidence assemblySecurity)
{
return ExecuteAssemblyByName (assemblyName, assemblySecurity, null);
}
+#if NET_4_0
+ [Obsolete ("Use an overload that does not take an Evidence parameter")]
+#endif
public int ExecuteAssemblyByName (string assemblyName, Evidence assemblySecurity, params string[] args)
{
Assembly a = Assembly.Load (assemblyName, assemblySecurity);
return ExecuteAssemblyInternal (a, args);
}
+#if NET_4_0
+ [Obsolete ("Use an overload that does not take an Evidence parameter")]
+#endif
public int ExecuteAssemblyByName (AssemblyName assemblyName, Evidence assemblySecurity, params string[] args)
{
Assembly a = Assembly.Load (assemblyName, assemblySecurity);
return ExecuteAssemblyInternal (a, args);
}
+#if NET_4_0
+ public int ExecuteAssemblyByName (string assemblyName, params string[] args)
+ {
+ Assembly a = Assembly.Load (assemblyName, null);
+
+ return ExecuteAssemblyInternal (a, args);
+ }
+
+ public int ExecuteAssemblyByName (AssemblyName assemblyName, params string[] args)
+ {
+ Assembly a = Assembly.Load (assemblyName, null);
+
+ return ExecuteAssemblyInternal (a, args);
+ }
+#endif
+
public bool IsDefaultAppDomain ()
{
return Object.ReferenceEquals (this, DefaultDomain);
{
return GetAssemblies (true);
}
+
+#else // MOONLIGHT
+
+ public int ExecuteAssemblyByName (string assemblyName)
+ {
+ // critical code in SL that we're not calling in ML
+ throw new NotImplementedException ();
+ }
#endif
-#if NET_1_1
+#if !NET_2_1
void _AppDomain.GetIDsOfNames ([In] ref Guid riid, IntPtr rgszNames, uint cNames, uint lcid, IntPtr rgDispId)
{
throw new NotImplementedException ();
throw new NotImplementedException ();
}
#endif
+
+#if NET_4_0 || MOONLIGHT
+ [MonoTODO ("Currently always returns false")]
+ public bool? IsCompatibilitySwitchSet (string value)
+ {
+ if (value == null)
+ throw new ArgumentNullException ("value");
+ // default (at least for SL4) is to return false for unknown values (can't get a null out of it)
+ return false;
+ }
+
+ [MonoTODO ("Currently always returns false")]
+ public static bool MonitoringIsEnabled {
+ get { return false; }
+ set { throw new NotImplementedException (); }
+ }
+
+ [MonoTODO]
+ public long MonitoringSurvivedMemorySize {
+ get { throw new NotImplementedException (); }
+ }
+
+ [MonoTODO]
+ public static long MonitoringSurvivedProcessMemorySize {
+ get { throw new NotImplementedException (); }
+ }
+
+ [MonoTODO]
+ public long MonitoringTotalAllocatedMemorySize {
+ get { throw new NotImplementedException (); }
+ }
+
+ [MonoTODO]
+ public TimeSpan MonitoringTotalProcessorTime {
+ get { throw new NotImplementedException (); }
+ }
+#endif
}
}