public void Ctor_NullAppDomain() { Assert.Throws(typeof(ArgumentNullException), () => { var target = new DisposableAppDomain(null); }); }
public void Dispose_ValidAppDomain() { var target = new DisposableAppDomain(AppDomain.CreateDomain("My domain")); target.Dispose(); Assert.True(target.IsDisposed); }
public void Dispose_CurrentAppDomain() { // The current app domain should NOT be unloaded, but the object should be disposed. var target = new DisposableAppDomain(AppDomain.CurrentDomain); target.Dispose(); Assert.True(target.IsDisposed); }
public void Ctor_CurrentApplicationDomain() { var target = new DisposableAppDomain(AppDomain.CurrentDomain); Assert.NotNull(target); Assert.NotNull(target.Domain); Assert.False(target.IsDisposed); }
public void Dispose_DomainProp() { // The current app domain should NOT be unloaded, but the object should be disposed. var target = new DisposableAppDomain(AppDomain.CreateDomain("My domain")); target.Dispose(); Assert.IsTrue(target.IsDisposed); var domain = target.Domain; }
public void Dispose_DomainProp() { Assert.Throws(typeof(ObjectDisposedException), () => { // The current app domain should NOT be unloaded, but the object should be disposed. var target = new DisposableAppDomain(AppDomain.CreateDomain("My domain")); target.Dispose(); Assert.True(target.IsDisposed); var domain = target.Domain; }); }
/// <summary> /// Runs the task (either launched as task or application). /// </summary> /// <param name="fromExe"></param> /// <returns></returns> protected override bool Run(bool fromExe) { try { var parameters = new StringDictionary(); foreach (var propertyInfo in GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.FlattenHierarchy).Where(p => p.PropertyType == typeof(string))) { parameters[propertyInfo.Name] = (string)propertyInfo.GetValue(this); } // when run from a .debugTask exe, there is no need to wrap in a separate AppDomain if (fromExe) { var singleStitcher = (IStitcher)Activator.CreateInstance(typeof(TSingleStitcher)); singleStitcher.Logging = Logging; return(singleStitcher.Process(parameters, BuildID, BuildTime, GetType().Assembly.Location)); } // the weaver runs isolated, since it it is going to load other modules var type = typeof(TSingleStitcher); var assemblyPath = type.Assembly.Location; var assemblyDirectory = Path.GetDirectoryName(assemblyPath); var thisAssemblyBytes = File.ReadAllBytes(assemblyPath); using (var taskAppDomain = new DisposableAppDomain("StitcherBoy", assemblyDirectory)) { var sticherProcessor = taskAppDomain.CreateInstanceAndUnwrap <StitcherProcessor>(); taskAppDomain.Load(thisAssemblyBytes); sticherProcessor.Logging = new RemoteLogging(Logging); sticherProcessor.Load(type.FullName); return(sticherProcessor.Process(parameters, BuildID, BuildTime, GetType().Assembly.Location)); } } catch (Exception e) { Logging.WriteError("Unhandled exception: {0}", e); } return(false); }
public void Ctor_NullAppDomain() { var target = new DisposableAppDomain(null); }