// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
+using System.Collections.Generic;
using System.IO;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security;
+using System.Runtime.Serialization.Formatters.Binary;
-#if NET_2_0
using System.Runtime.Hosting;
using System.Security.Policy;
-#endif
namespace System
{
[Serializable]
[ClassInterface (ClassInterfaceType.None)]
-#if NET_2_0
[ComVisible (true)]
-#endif
+ [StructLayout (LayoutKind.Sequential)]
#if NET_2_1
public sealed class AppDomainSetup
#else
string shadow_copy_files;
bool publisher_policy;
private bool path_changed;
+#if MOBILE
+ private int loader_optimization;
+#else
private LoaderOptimization loader_optimization;
+#endif
bool disallow_binding_redirects;
bool disallow_code_downloads;
- // those fields also exist in the runtime, so we need dummies in 1.x profile too.
-#if NET_2_0
+#if MOBILE
+ object _activationArguments;
+ object domain_initializer;
+ object application_trust;
+#else
private ActivationArguments _activationArguments;
AppDomainInitializer domain_initializer;
[NonSerialized]
ApplicationTrust application_trust;
-#else
- object _activationArguments;
- object domain_initializer; // always null
#endif
string [] domain_initializer_args;
- SecurityElement application_trust_xml;
+
bool disallow_appbase_probe;
byte [] configuration_bytes;
+ byte [] serialized_non_primitives;
+
public AppDomainSetup ()
{
}
loader_optimization = setup.loader_optimization;
disallow_binding_redirects = setup.disallow_binding_redirects;
disallow_code_downloads = setup.disallow_code_downloads;
-//#if NET_2_0
_activationArguments = setup._activationArguments;
domain_initializer = setup.domain_initializer;
+ application_trust = setup.application_trust;
domain_initializer_args = setup.domain_initializer_args;
- application_trust_xml = setup.application_trust_xml;
disallow_appbase_probe = setup.disallow_appbase_probe;
configuration_bytes = setup.configuration_bytes;
-//#endif
}
-#if NET_2_0
public AppDomainSetup (ActivationArguments activationArguments)
{
_activationArguments = activationArguments;
{
_activationArguments = new ActivationArguments (activationContext);
}
-#endif
static string GetAppBase (string appBase)
{
// Under Windows prepend "//" to indicate it's a local file
appBase = "//" + appBase;
}
-#if NET_2_0
} else {
-#else
- // under 1.x the ":" gets a special treatment - but it doesn't make sense outside Windows
- } else if (!Environment.IsRunningOnWindows || (appBase.IndexOf (':') == -1)) {
-#endif
appBase = Path.GetFullPath (appBase);
}
}
}
- [MonoTODO ("In Mono this is controlled by the --share-code flag")]
+ [MonoLimitation ("In Mono this is controlled by the --share-code flag")]
public LoaderOptimization LoaderOptimization {
get {
- return loader_optimization;
+ return (LoaderOptimization)loader_optimization;
}
set {
+#if MOBILE
+ loader_optimization = (int)value;
+#else
loader_optimization = value;
+#endif
}
}
}
}
-#if NET_1_1
public bool DisallowBindingRedirects {
get {
return disallow_binding_redirects;
disallow_code_downloads = value;
}
}
-#endif
-#if NET_2_0
+ public string TargetFrameworkName { get; set; }
+
public ActivationArguments ActivationArguments {
- get { return _activationArguments; }
+ get {
+ if (_activationArguments != null)
+ return (ActivationArguments)_activationArguments;
+ DeserializeNonPrimitives ();
+ return (ActivationArguments)_activationArguments;
+ }
set { _activationArguments = value; }
}
+#if MONO_FEATURE_MULTIPLE_APPDOMAINS
[MonoLimitation ("it needs to be invoked within the created domain")]
public AppDomainInitializer AppDomainInitializer {
- get { return domain_initializer; }
+ get {
+ if (domain_initializer != null)
+ return (AppDomainInitializer)domain_initializer;
+ DeserializeNonPrimitives ();
+ return (AppDomainInitializer)domain_initializer;
+ }
set { domain_initializer = value; }
}
+#else
+ [Obsolete ("AppDomainSetup.AppDomainInitializer is not supported on this platform.", true)]
+ public AppDomainInitializer AppDomainInitializer {
+ get { throw new PlatformNotSupportedException ("AppDomainSetup.AppDomainInitializer is not supported on this platform."); }
+ set { throw new PlatformNotSupportedException ("AppDomainSetup.AppDomainInitializer is not supported on this platform."); }
+ }
+#endif // MONO_FEATURE_MULTIPLE_APPDOMAINS
+
[MonoLimitation ("it needs to be used to invoke the initializer within the created domain")]
public string [] AppDomainInitializerArguments {
[MonoNotSupported ("This property exists but not considered.")]
public ApplicationTrust ApplicationTrust {
get {
- if (application_trust_xml == null)
- return null;
+ if (application_trust != null)
+ return (ApplicationTrust)application_trust;
+ DeserializeNonPrimitives ();
if (application_trust == null)
application_trust = new ApplicationTrust ();
- return application_trust;
- }
- set {
- application_trust = value;
- if (value != null) {
- application_trust_xml = value.ToXml ();
- application_trust.FromXml (application_trust_xml);
- }
- else
- application_trust_xml = null;
+ return (ApplicationTrust)application_trust;
}
+ set { application_trust = value; }
}
[MonoNotSupported ("This property exists but not considered.")]
{
configuration_bytes = value;
}
+
+ private void DeserializeNonPrimitives ()
+ {
+ lock (this) {
+ if (serialized_non_primitives == null)
+ return;
+
+ BinaryFormatter bf = new BinaryFormatter ();
+ MemoryStream ms = new MemoryStream (serialized_non_primitives);
+
+ object [] arr = (object []) bf.Deserialize (ms);
+
+ _activationArguments = (ActivationArguments) arr [0];
+#if MONO_FEATURE_MULTIPLE_APPDOMAINS
+ domain_initializer = (AppDomainInitializer) arr [1];
#endif
+ application_trust = (ApplicationTrust) arr [2];
+
+ serialized_non_primitives = null;
+ }
+ }
+
+ internal void SerializeNonPrimitives ()
+ {
+ object [] arr = new object [3];
+
+ arr [0] = _activationArguments;
+ arr [1] = domain_initializer;
+ arr [2] = application_trust;
+
+ BinaryFormatter bf = new BinaryFormatter ();
+ MemoryStream ms = new MemoryStream ();
+
+ bf.Serialize (ms, arr);
+
+ serialized_non_primitives = ms.ToArray ();
+ }
+
+ [MonoTODO ("not implemented, does not throw because it's used in testing moonlight")]
+ public void SetCompatibilitySwitches (IEnumerable<string> switches)
+ {
+ }
}
}