Ejemplo n.º 1
0
        private static IContainer CreateContainer(AnalysisOptionsBuilder options)
        {
            var builder = new ContainerBuilder();

            builder.RegisterInstance <TextWriter>(Console.Out);
            builder.RegisterType <Program>()
            .AsSelf();

            builder.RegisterInstance(options)
            .As <IReferenceAssemblyOptions>()
            .As <IAnalysisOptions>();

            builder.RegisterModule <NuGetModule>();
            builder.RegisterModule <AssemblyCompatibilityModule>();
            builder.RegisterModule <RulesModule>();
            builder.RegisterModule <RabbitMqModule>();
            builder.RegisterModule <ProtobufModule>();
            builder.RegisterModule <MongoDbModule>();

            builder.RegisterType <RequestProcessor>()
            .As <IRequestProcessor>()
            .SingleInstance();

            builder.RegisterAssemblyTypes(typeof(Program).Assembly)
            .Where(t => !t.IsAbstract && t.IsAssignableTo <ICommand>())
            .Where(t => t.GetCustomAttribute <CommandAttribute>()?.Command == options.Command)
            .As <ICommand>();

            return(builder.Build());
        }
Ejemplo n.º 2
0
        private static async Task Main(string[] args)
        {
            var version = typeof(Program).Assembly.GetName().Version;

            Console.WriteLine($"Package Compatibility Analyzer v{version}{Environment.NewLine}");

            await Task.Delay(2000);

            try
            {
                var options = AnalysisOptionsBuilder.Parse(args);

                using (var container = CreateContainer(options))
                {
                    await container.Resolve <ICommand>().RunAsync();
                }
            }
            catch (CompatibilityAnalysisException e)
            {
                Console.WriteLine(e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
Ejemplo n.º 3
0
        public static AnalysisOptionsBuilder Parse(string[] args)
        {
            var options = new AnalysisOptionsBuilder();
            var syntax  = default(ArgumentSyntax);

            try
            {
                if (args.Length == 0)
                {
                    return(options);
                }

                ArgumentSyntax.Parse(args, arg =>
                {
                    arg.HandleErrors = false;

                    arg.DefineCommand("analyze", ref options._command, AnalysisCommand.Analyze, "Analyze packages");

                    arg.DefineOption("packageId", ref options._packageId, true, "NuGet package to analyze");
                    arg.DefineOption("original", ref options._originalVersion, true, "Original package");
                    arg.DefineOption("updated", ref options._updatedVersion, true, "Updated packages");
                    arg.DefineOption("feed", ref options._feed, false, "NuGet feed to use");
                    arg.DefineOption("verbose", ref options._verbose, false, "Turn verbose output on");
                    arg.DefineOption("ref", ref options._referencePath, false, "Zip archive of reference assemblies");

                    arg.DefineCommand("ref", ref options._command, AnalysisCommand.CollectReferenceAssemblies, "Collect reference assemblies");
                    arg.DefineOption("path", ref options._referencePath, true, "Path to save reference assembly collection");

                    arg.DefineCommand("monitor", ref options._command, AnalysisCommand.MonitorQueue, "Monitor queue");

                    syntax = arg;
                });

                options.Validate(syntax);

                return(options);
            }
            catch (ArgumentSyntaxException e)
            {
                throw new ArgumentParsingException(syntax, e.Message);
            }
        }