/// <summary> /// Runs the main entry point method passing arguments to it /// </summary> /// <param name="args">The arguments.</param> /// <param name="logger">The logger.</param> /// <returns>System.Int32.</returns> /// <exception cref="System.InvalidOperationException">Must call TryLock before calling this method</exception> public int Run(string[] args, IServerLogger logger) { if (!isRunning) { throw new InvalidOperationException("Must call TryLock before calling this method"); } try { lastRunTime = DateTime.Now; using (var appDomainRedirectLogger = new AppDomainRedirectLogger(logger)) { appDomainCallback.Logger = appDomainRedirectLogger; appDomainCallback.Arguments = args; appDomain.DoCallBack(appDomainCallback.Run); var result = appDomainCallback.Result; //var result = appDomain.ExecuteAssembly(mainAssemblyPath, args); Console.WriteLine("Return result: {0}", result); return(result); } } catch (Exception exception) { logger.OnLog(string.Format("Unexpected exception: {0}", exception), ConsoleColor.Red); return(1); } finally { lastRunTime = DateTime.Now; } }
/// <summary> /// Runs the assembly with the specified arguments.xit /// </summary> /// <param name="workingDirectory">The working directory.</param> /// <param name="environmentVariables">The environment variables.</param> /// <param name="args">The main arguments.</param> /// <param name="logger">The logger.</param> /// <returns>System.Int32.</returns> public int Run(string workingDirectory, Dictionary <string, string> environmentVariables, string[] args, IServerLogger logger) { lock (disposingLock) { if (isDisposed) { logger.OnLog("Error, server is being shutdown, cannot run Compiler", ConsoleColor.Red); return(1); } } AppDomainShadow shadowDomain = null; try { shadowDomain = GetOrNew(IsCachingAppDomain); return(shadowDomain.Run(workingDirectory, environmentVariables, args, logger)); } finally { if (shadowDomain != null) { shadowDomain.EndRun(); if (!IsCachingAppDomain) { shadowDomain.Dispose(); } } } }
/// <summary> /// Runs the assembly with the specified arguments.xit /// </summary> /// <param name="workingDirectory">The working directory.</param> /// <param name="environmentVariables">The environment variables.</param> /// <param name="args">The main arguments.</param> /// <param name="shadowCache">If [true], use shadow cache.</param> /// <param name="logger">The logger.</param> /// <returns>System.Int32.</returns> public int Run(string workingDirectory, Dictionary<string, string> environmentVariables, string[] args, bool shadowCache, IServerLogger logger) { lock (disposingLock) { if (isDisposed) { logger.OnLog("Error, server is being shutdown, cannot run Compiler", ConsoleColor.Red); return 1; } } AppDomainShadow shadowDomain = null; try { shadowDomain = GetOrNew(shadowCache, IsCachingAppDomain); return shadowDomain.Run(workingDirectory, environmentVariables, args, logger); } finally { if (shadowDomain != null) { shadowDomain.EndRun(); if (!IsCachingAppDomain) { shadowDomain.Dispose(); } } } }
/// <summary> /// Runs the main entry point method passing arguments to it /// </summary> /// <param name="workingDirectory"></param> /// <param name="environmentVariables">The environment variables.</param> /// <param name="args">The arguments.</param> /// <param name="logger">The logger.</param> /// <returns>System.Int32.</returns> /// <exception cref="System.InvalidOperationException">Must call TryLock before calling this method</exception> public int Run(string workingDirectory, Dictionary<string, string> environmentVariables, string[] args, IServerLogger logger) { if (!isRunning) { throw new InvalidOperationException("Must call TryLock before calling this method"); } try { lastRunTime = DateTime.Now; using (var appDomainRedirectLogger = new AppDomainRedirectLogger(logger)) { appDomainCallback.Logger = appDomainRedirectLogger; appDomainCallback.CurrentDirectory = workingDirectory; appDomainCallback.EnvironmentVariables = environmentVariables; appDomainCallback.Arguments = args; appDomain.DoCallBack(appDomainCallback.Run); var result = appDomain.GetData("Result") as int?; //var result = appDomain.ExecuteAssembly(mainAssemblyPath, args); Console.WriteLine("Return result: {0}", result); return result ?? -1; } } catch (Exception exception) { logger.OnLog(string.Format("Unexpected exception: {0}", exception), ConsoleColor.Red); return 1; } finally { lastRunTime = DateTime.Now; } }