//Create a SandBox to load Assemblies with "Full Trust" public static ServiceBridge Sandbox(string assemblyFilename, string configPath, ResolveEventHandler handler) { var trustedLoadGrantSet = new PermissionSet(PermissionState.Unrestricted); var trustedLoadSetup = new AppDomainSetup(); trustedLoadSetup.ApplicationBase = Path.GetDirectoryName(assemblyFilename); trustedLoadSetup.PrivateBinPath = Path.GetDirectoryName(assemblyFilename); //trustedLoadSetup.ConfigurationFile = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile; trustedLoadSetup.ConfigurationFile = configPath; AppDomain.CurrentDomain.AssemblyResolve += handler; AppDomain appDomain = AppDomain.CreateDomain("ServiceBridge SandBox", null, trustedLoadSetup, trustedLoadGrantSet); appDomain.SetData("DataDirectory", configPath.Replace("Web.config", "App_Data")); ServiceBridge loader = appDomain.CreateInstanceAndUnwrap( typeof(ServiceBridge).Assembly.GetName().FullName, typeof(ServiceBridge).FullName, false, BindingFlags.Default, null, new object[] { assemblyFilename }, CultureInfo.InvariantCulture, null) as ServiceBridge; return(loader); }
public void StartApplication() { //Ensure that the Umbraco.VisualStudio.dll is available in the solution's bin folder var mainAssemblyDestinationPath = Path.Combine(_projectBinFolder, AssemblyFileName); if (File.Exists(mainAssemblyDestinationPath) == false) { var mainAssemblySourcePath = GetAssemblyLocation(AssemblyFileName); File.Copy(mainAssemblySourcePath, mainAssemblyDestinationPath); } //Load the ServiceBridge in a sandboxed appdomain using the directory/context of the solution var assemblyLocation = Path.Combine(_projectBinFolder, "Umbraco.Core.dll"); ServiceBridge loader = ServiceBridge.Sandbox(assemblyLocation, _configurationFile, CurrentDomain_AssemblyResolve); _bridge = loader; if (_bridge == null) return; _bridge.Configure(_connectionString, _providerName, _projectFolder); SetupMethodShortcuts(); IsReady = true; }
public void StartApplication() { //var domainSetup = new AppDomainSetup() // { // ApplicationBase = _projectBinFolder, // ConfigurationFile = _configurationFile, // ApplicationName = // AppDomain.CurrentDomain.SetupInformation.ApplicationName, // LoaderOptimization = LoaderOptimization.MultiDomainHost // }; //var baseEvidence = AppDomain.CurrentDomain.Evidence; //var evidence = new Evidence(baseEvidence); //var childDomain = AppDomain.CreateDomain(AppDomainName, evidence, domainSetup); //childDomain.SetData("DataDirectory", _projectAppDataFolder); //var assemblyLocation = Path.Combine(_projectBinFolder, AssemblyFileName); //GetAssemblyLocation(AssemblyFileName); //var proxy = childDomain.CreateInstanceFromAndUnwrap(assemblyLocation, typeof(ServiceBridge).FullName); //_bridge = proxy as IServiceBridge; //Evidence adevidence = AppDomain.CurrentDomain.Evidence; //var newAppDomain = AppDomain.CreateDomain(AppDomainName, adevidence, _projectBinFolder, _projectBinFolder, true); //newAppDomain.SetData("DataDirectory", _projectAppDataFolder); //var assemblyLocation = Path.Combine(_projectBinFolder, AssemblyFileName); ////var unwrapped = newAppDomain.CreateInstanceFromAndUnwrap(assemblyLocation, typeof(ServiceBridge).FullName); //var unwrapped = newAppDomain.CreateInstanceFromAndUnwrap(assemblyLocation, typeof(ServiceBridge).FullName, false, BindingFlags.Default, null, null, CultureInfo.InvariantCulture, null); //_bridge = unwrapped as ServiceBridge; var assemblyLocation = /*GetAssemblyLocation(AssemblyFileName);*/ Path.Combine(_projectBinFolder, "Umbraco.Core.dll"); ServiceBridge loader = ServiceBridge.Sandbox(assemblyLocation, _configurationFile, CurrentDomain_AssemblyResolve); _bridge = loader; if (_bridge == null) return; _connectionString = @"Data Source=C:\Temp\Playground\Umb610TestSiteVsPlugin\Umb610TestSiteVsPlugin\App_Data\Umbraco.sdf"; _providerName = "System.Data.SqlServerCe.4.0"; _bridge.Configure(_connectionString, _providerName, _projectFolder); _methods = new Dictionary<string, Func<Dictionary<int, Dictionary<string, string>>>> { {"content", _bridge.GetRootContent}, {"media", _bridge.GetRootMedia}, {"contentTypes", _bridge.GetRootContentTypes}, {"mediaTypes", _bridge.GetRootMediaTypes} }; _methodsById = new Dictionary<string, Func<int, Dictionary<int, Dictionary<string, string>>>> { {"content", _bridge.GetChildContent}, {"media", _bridge.GetChildMedia}, {"contentTypes", _bridge.GetChildContentTypes}, {"mediaTypes", _bridge.GetChildMediaTypes} }; IsReady = true; }