Inheritance: System.MarshalByRefObject
        //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;
        }