Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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());
            }
        }