public static void RunInSeparateAppDomain(AppDomainSetup setup, Action action) { var dir = Path.GetDirectoryName(typeof(AppDomainUtils).Assembly.CodeBase) .Replace("file:\\", ""); setup.PrivateBinPath = dir; setup.ApplicationBase = dir; setup.ApplicationName = Guid.NewGuid().ToString(); setup.ShadowCopyFiles = "true"; setup.ShadowCopyDirectories = setup.ApplicationBase; setup.CachePath = Path.Combine(Path.GetTempPath(), setup.ApplicationName); AppDomain appDomain = null; try { appDomain = AppDomain.CreateDomain(setup.ApplicationName, null, setup); AppDomainHelper helper = appDomain.CreateInstanceAndUnwrap( typeof(AppDomainUtils).Assembly.FullName, typeof(AppDomainHelper).FullName ) as AppDomainHelper; helper.Run(action); } finally { if (appDomain != null) { AppDomain.Unload(appDomain); } } }
public static void RunInSeparateAppDomain(AppDomainSetup setup, Action action) { var dir = Path.GetDirectoryName(typeof(AppDomainUtils).Assembly.CodeBase).Replace("file:\\", ""); setup.PrivateBinPath = dir; setup.ApplicationBase = dir; var appdomain = AppDomain.CreateDomain(new Guid().ToString(), null, setup); AppDomainHelper helper = appdomain.CreateInstanceAndUnwrap(typeof(AppDomainUtils).Assembly.FullName, typeof(AppDomainHelper).FullName) as AppDomainHelper; helper.Run(action); }