public SS14UnitTest() { /* * Assembly.getEntryAssembly() returns null because Unit tests * are unmanaged and have no app domain managers. * this causes IOCManager to never load or build any of the types * * Fixed by Setting the Entry assembly values manually here */ Assembly assembly = Assembly.GetCallingAssembly(); AppDomainManager manager = new AppDomainManager(); FieldInfo entryAssemblyfield = manager.GetType().GetField("m_entryAssembly", BindingFlags.Instance | BindingFlags.NonPublic); entryAssemblyfield.SetValue(manager, assembly); AppDomain domain = AppDomain.CurrentDomain; FieldInfo domainManagerField = domain.GetType().GetField("_domainManager", BindingFlags.Instance | BindingFlags.NonPublic); domainManagerField.SetValue(domain, manager); /* end fix */ //ConfigurationManager setup GetConfigurationManager = IoCManager.Resolve<IPlayerConfigurationManager>(); GetConfigurationManager.Initialize("./player_config.xml"); //ResourceManager Setup GetResourceManager = IoCManager.Resolve<IResourceManager>(); GetResourceManager.LoadBaseResources(); GetResourceManager.LoadLocalResources(); }
/// <summary> /// Allows setting the Entry Assembly when needed. /// Use AssemblyUtilities.SetEntryAssembly() as first line in XNA ad hoc tests /// </summary> /// <param name="assembly">Assembly to set as entry assembly</param> public static void SetEntryAssembly(Assembly assembly) { AppDomainManager manager = new AppDomainManager(); FieldInfo entryAssemblyfield = manager.GetType().GetField("m_entryAssembly", BindingFlags.Instance | BindingFlags.NonPublic); entryAssemblyfield.SetValue(manager, assembly); AppDomain domain = AppDomain.CurrentDomain; FieldInfo domainManagerField = domain.GetType().GetField("_domainManager", BindingFlags.Instance | BindingFlags.NonPublic); domainManagerField.SetValue(domain, manager); }
/// <summary> /// Allows setting the Entry Assembly when needed. /// Use AssemblyUtilities.SetEntryAssembly() as first line in XNA ad hoc tests /// </summary> /// <param name="assembly">Assembly to set as entry assembly</param> public static void Inject(Assembly assembly = null) { assembly = assembly ?? Assembly.GetCallingAssembly(); var manager = new AppDomainManager(); var entryAssemblyfield = manager.GetType().GetField("m_entryAssembly", BindingFlags.Instance | BindingFlags.NonPublic); entryAssemblyfield.SetValue(manager, assembly); var domain = AppDomain.CurrentDomain; var domainManagerField = domain.GetType().GetField("_domainManager", BindingFlags.Instance | BindingFlags.NonPublic); domainManagerField.SetValue(domain, manager); }
public static void SetupTest(TestContext tc) { Console.WriteLine("TestBase::Setup"); Assembly assembly = Assembly.GetExecutingAssembly(); AppDomainManager manager = new AppDomainManager(); FieldInfo entryAssemblyfield = manager.GetType().GetField("m_entryAssembly", BindingFlags.Instance | BindingFlags.NonPublic); entryAssemblyfield.SetValue(manager, assembly); AppDomain domain = AppDomain.CurrentDomain; FieldInfo domainManagerField = domain.GetType().GetField("_domainManager", BindingFlags.Instance | BindingFlags.NonPublic); domainManagerField.SetValue(domain, manager); }
/// <summary> /// Allows setting the Entry Assembly when needed. /// Use SetEntryAssembly() only for tests /// </summary> /// <param name="assembly">Assembly to set as entry assembly</param> private static void SetEntryAssembly(Assembly assembly) { if (Assembly.GetEntryAssembly() != null) { return; } var manager = new AppDomainManager(); var entryAssemblyfield = manager.GetType().GetField("m_entryAssembly", BindingFlags.Instance | BindingFlags.NonPublic); if (entryAssemblyfield != null) { entryAssemblyfield.SetValue(manager, assembly); } var domain = AppDomain.CurrentDomain; var domainManagerField = domain.GetType().GetField("_domainManager", BindingFlags.Instance | BindingFlags.NonPublic); if (domainManagerField != null) { domainManagerField.SetValue(domain, manager); } }
private void CreateAppDomainManager() { Contract.Assert(_domainManager == null, "_domainManager == null"); AppDomainSetup adSetup = FusionStore; #if FEATURE_VERSIONING String trustedPlatformAssemblies = (String)(GetData("TRUSTED_PLATFORM_ASSEMBLIES")); if (trustedPlatformAssemblies != null) { String platformResourceRoots = (String)(GetData("PLATFORM_RESOURCE_ROOTS")); if (platformResourceRoots == null) { platformResourceRoots = String.Empty; } String appPaths = (String)(GetData("APP_PATHS")); if (appPaths == null) { appPaths = String.Empty; } String appNiPaths = (String)(GetData("APP_NI_PATHS")); if (appNiPaths == null) { appNiPaths = String.Empty; } String appLocalWinMD = (String)(GetData("APP_LOCAL_WINMETADATA")); if (appLocalWinMD == null) { appLocalWinMD = String.Empty; } SetupBindingPaths(trustedPlatformAssemblies, platformResourceRoots, appPaths, appNiPaths, appLocalWinMD); } #endif // FEATURE_VERSIONING string domainManagerAssembly; string domainManagerType; GetAppDomainManagerType(out domainManagerAssembly, out domainManagerType); if (domainManagerAssembly != null && domainManagerType != null) { try { new PermissionSet(PermissionState.Unrestricted).Assert(); _domainManager = CreateInstanceAndUnwrap(domainManagerAssembly, domainManagerType) as AppDomainManager; CodeAccessPermission.RevertAssert(); } catch (FileNotFoundException e) { throw new TypeLoadException(Environment.GetResourceString("Argument_NoDomainManager"), e); } catch (SecurityException e) { throw new TypeLoadException(Environment.GetResourceString("Argument_NoDomainManager"), e); } catch (TypeLoadException e) { throw new TypeLoadException(Environment.GetResourceString("Argument_NoDomainManager"), e); } if (_domainManager == null) { throw new TypeLoadException(Environment.GetResourceString("Argument_NoDomainManager")); } // If this domain was not created by a managed call to CreateDomain, then the AppDomainSetup // will not have the correct values for the AppDomainManager set. FusionStore.AppDomainManagerAssembly = domainManagerAssembly; FusionStore.AppDomainManagerType = domainManagerType; bool notifyFusion = _domainManager.GetType() != typeof(System.AppDomainManager) && !DisableFusionUpdatesFromADManager(); AppDomainSetup FusionStoreOld = null; if (notifyFusion) FusionStoreOld = new AppDomainSetup(FusionStore, true); // Initialize the AppDomainMAnager and register the instance with the native host if requested _domainManager.InitializeNewDomain(FusionStore); if (notifyFusion) SetupFusionStore(_FusionStore, FusionStoreOld); // Notify Fusion about the changes the user implementation of InitializeNewDomain may have made to the FusionStore object. #if FEATURE_APPDOMAINMANAGER_INITOPTIONS AppDomainManagerInitializationOptions flags = _domainManager.InitializationFlags; if ((flags & AppDomainManagerInitializationOptions.RegisterWithHost) == AppDomainManagerInitializationOptions.RegisterWithHost) { _domainManager.RegisterWithHost(); } #endif // FEATURE_APPDOMAINMANAGER_INITOPTIONS } InitializeCompatibilityFlags(); }
private void CreateAppDomainManager() { Contract.Assert(_domainManager == null, "_domainManager == null"); AppDomainSetup adSetup = FusionStore; #if FEATURE_VERSIONING if (String.IsNullOrEmpty(adSetup.GetUnsecureManifestFilePath())) { String trustedPlatformAssemblies = (String)(GetData("TRUSTED_PLATFORM_ASSEMBLIES")); if (trustedPlatformAssemblies != null) { String platformResourceRoots = (String)(GetData("PLATFORM_RESOURCE_ROOTS")); if (platformResourceRoots == null) { platformResourceRoots = String.Empty; } String appPaths = (String)(GetData("APP_PATHS")); if (appPaths == null) { appPaths = String.Empty; } String appNiPaths = (String)(GetData("APP_NI_PATHS")); if (appNiPaths == null) { appNiPaths = String.Empty; } SetupBindingPaths(trustedPlatformAssemblies, platformResourceRoots, appPaths, appNiPaths); } } else { // Chicken-Egg problem: At this point, security is not yet fully up. // We need this information to power up the manifest to enable security. String manifestFilePath = adSetup.GetUnsecureManifestFilePath(); bool fIsAssemblyPath = false; String applicationBase = adSetup.GetUnsecureApplicationBase(); String applicationName = adSetup.ApplicationName; if ((manifestFilePath == null) && (applicationBase != null) && (applicationName != null)) { manifestFilePath = Path.Combine(applicationBase, applicationName); fIsAssemblyPath = true; } SetupManifest(manifestFilePath, fIsAssemblyPath); } #endif // FEATURE_VERSIONING string domainManagerAssembly; string domainManagerType; GetAppDomainManagerType(out domainManagerAssembly, out domainManagerType); if (domainManagerAssembly != null && domainManagerType != null) { try { new PermissionSet(PermissionState.Unrestricted).Assert(); _domainManager = CreateInstanceAndUnwrap(domainManagerAssembly, domainManagerType) as AppDomainManager; CodeAccessPermission.RevertAssert(); } catch (FileNotFoundException e) { throw new TypeLoadException(Environment.GetResourceString("Argument_NoDomainManager"), e); } catch (SecurityException e) { throw new TypeLoadException(Environment.GetResourceString("Argument_NoDomainManager"), e); } catch (TypeLoadException e) { throw new TypeLoadException(Environment.GetResourceString("Argument_NoDomainManager"), e); } if (_domainManager == null) { throw new TypeLoadException(Environment.GetResourceString("Argument_NoDomainManager")); } // If this domain was not created by a managed call to CreateDomain, then the AppDomainSetup // will not have the correct values for the AppDomainManager set. FusionStore.AppDomainManagerAssembly = domainManagerAssembly; FusionStore.AppDomainManagerType = domainManagerType; bool notifyFusion = _domainManager.GetType() != typeof(System.AppDomainManager) && !DisableFusionUpdatesFromADManager(); AppDomainSetup FusionStoreOld = null; if (notifyFusion) FusionStoreOld = new AppDomainSetup(FusionStore, true); // Initialize the AppDomainMAnager and register the instance with the native host if requested _domainManager.InitializeNewDomain(FusionStore); if (notifyFusion) SetupFusionStore(_FusionStore, FusionStoreOld); // Notify Fusion about the changes the user implementation of InitializeNewDomain may have made to the FusionStore object. #if FEATURE_APPDOMAINMANAGER_INITOPTIONS AppDomainManagerInitializationOptions flags = _domainManager.InitializationFlags; if ((flags & AppDomainManagerInitializationOptions.RegisterWithHost) == AppDomainManagerInitializationOptions.RegisterWithHost) { _domainManager.RegisterWithHost(); } #endif // FEATURE_APPDOMAINMANAGER_INITOPTIONS } InitializeCompatibilityFlags(); }