private void InitHostingEnvironment() { try { var env = new HostingEnvironment(); var type = env.GetType(); var init = type .GetMethods(BindingFlags.Instance | BindingFlags.NonPublic) .FirstOrDefault(m => m.Name == "Initialize"); var args = new object[init.GetParameters().Length]; args[0] = ApplicationManager.GetApplicationManager(); args[1] = this; args[2] = GetConfigMapPathFactory(); init.Invoke(env, args); } catch (Exception e) { Console.WriteLine(e); } }
private void InitHostingEnvironment() { try { // very hacky way to initialize ASP.NET runtime inside same app domain var appSettings = ConfigurationManager.AppSettings; Debug.Assert(appSettings != null); var cfg = typeof(ConfigurationManager).GetStaticField("s_configSystem"); var env = new HostingEnvironment(); var configSystem = env.GetType().Assembly.GetType("System.Web.Configuration.HttpConfigurationSystem", false); var cfgsys = cfg.GetField("_configSystem"); configSystem.SetStaticField("s_configSystem", cfgsys); configSystem.SetStaticField("s_configRoot", cfgsys.GetField("_configRoot")); configSystem.SetStaticField("s_inited", true); var type = env.GetType(); var init = type .GetMethods(BindingFlags.Instance | BindingFlags.NonPublic) .FirstOrDefault(m => m.Name == "Initialize"); var args = (from p in init.GetParameters() select GetDefaultValue(p.ParameterType)).ToArray(); args[0] = ApplicationManager.GetApplicationManager(); args[1] = this; args[2] = GetConfigMapPathFactory(); init.Invoke(env, args); } catch (Exception e) { Console.WriteLine(e); } }