public void Run(string[] args) { // Parse args if (args.Length > 0 && String.Equals("dbg", args[0], StringComparison.OrdinalIgnoreCase)) { args = args.Skip(1).ToArray(); Debugger.Launch(); } var parsed = Args.Parse <Arguments>(args); if (parsed.Help) { ArgUsage.GenerateUsageFromTemplate <Arguments>().Write(); return; } // Set defaults string inferredConfig = null; parsed.BaseDirectory = Path.GetFullPath(String.IsNullOrEmpty(parsed.BaseDirectory) ? InferBaseDirectory(out inferredConfig) : parsed.BaseDirectory); Console.WriteLine("Using Base Directory: " + parsed.BaseDirectory); // Find services platform var platformAssemblyFile = Path.Combine(parsed.BaseDirectory, "NuGet.Services.Platform.dll"); if (!File.Exists(platformAssemblyFile)) { Console.Error.WriteLine("Unable to locate NuGet.Services.Platform.dll in base directory!"); return; } // Check for nuhost file var configFile = Path.Combine(parsed.BaseDirectory, "nuhost.json"); var config = File.Exists(configFile) ? NuHostConfig.Load(configFile) : NuHostConfig.Default; config.ClrConfigFile = String.IsNullOrEmpty(config.ClrConfigFile) ? inferredConfig : config.ClrConfigFile; if (!String.IsNullOrEmpty(config.ClrConfigFile)) { if (!Path.IsPathRooted(config.ClrConfigFile)) { config.ClrConfigFile = Path.Combine(parsed.BaseDirectory, config.ClrConfigFile); } Console.WriteLine("Using CLR config file: " + config.ClrConfigFile); } ResolveAssembliesFromDirectory(parsed.BaseDirectory); LoadAndStartApp(parsed, config); }
private void LoadAndStartApp(Arguments parsed, NuHostConfig config) { // Create start options NuGetDomainStartOptions options = new NuGetDomainStartOptions() { HostApplicationBase = AppDomain.CurrentDomain.SetupInformation.ApplicationBase, ApplicationBase = parsed.BaseDirectory }; if (!String.IsNullOrEmpty(parsed.Configuration)) { options.Configuration = JsonConvert.DeserializeObject <Dictionary <string, string> >(parsed.Configuration); } options.AppDescription = new ServiceHostDescription( ServiceHostInstanceName.Parse("nuget-local-0-nuhost_IN" + Process.GetCurrentProcess().Id.ToString()), Environment.MachineName); if (parsed.Services != null) { options.Services = parsed.Services.ToList(); } var urls = parsed.Urls ?? NuGetApp.GetUrls(parsed.HttpPort, parsed.HttpsPort, parsed.HttpPath, localOnly: true); foreach (var url in urls) { options.Urls.Add(url); } // Create the AppDomain var setup = new AppDomainSetup() { ApplicationBase = options.ApplicationBase, ConfigurationFile = config.ClrConfigFile }; var domain = AppDomain.CreateDomain("NuGetServices", null, setup); dynamic agent = domain.CreateInstanceAndUnwrap( "NuGet.Services.Platform", "NuGet.Services.Hosting.ConsoleApplicationHost"); try { agent.Run(options); } catch (AggregateException aex) { Console.WriteLine(aex.InnerException.ToString()); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } }
private void LoadAndStartApp(Arguments parsed, NuHostConfig config) { // Create start options NuGetDomainStartOptions options = new NuGetDomainStartOptions() { HostApplicationBase = AppDomain.CurrentDomain.SetupInformation.ApplicationBase, ApplicationBase = parsed.BaseDirectory }; if (!String.IsNullOrEmpty(parsed.Configuration)) { options.Configuration = JsonConvert.DeserializeObject<Dictionary<string, string>>(parsed.Configuration); } options.AppDescription = new ServiceHostDescription( ServiceHostInstanceName.Parse("nuget-local-0-nuhost_IN" + Process.GetCurrentProcess().Id.ToString()), Environment.MachineName); if (parsed.Services != null) { options.Services = parsed.Services.ToList(); } var urls = parsed.Urls ?? NuGetApp.GetUrls(parsed.HttpPort, parsed.HttpsPort, parsed.HttpPath, localOnly: true); foreach (var url in urls) { options.Urls.Add(url); } // Create the AppDomain var setup = new AppDomainSetup() { ApplicationBase = options.ApplicationBase, ConfigurationFile = config.ClrConfigFile }; var domain = AppDomain.CreateDomain("NuGetServices", null, setup); dynamic agent = domain.CreateInstanceAndUnwrap( "NuGet.Services.Platform", "NuGet.Services.Hosting.ConsoleApplicationHost"); try { agent.Run(options); } catch (AggregateException aex) { Console.WriteLine(aex.InnerException.ToString()); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } }