Exemplo n.º 1
0
        static void Main(string[] args)
        {
            var argsDictionary = ParseCommandLineArgs(args);

            if (argsDictionary.ContainsKey("help"))
            {
                PrintHelp();
                return;
            }

            if (!ValidateArguments(argsDictionary))
            {
                PrintHelpAndExitWithError();
                return;
            }

            if (argsDictionary.ContainsKey("namespaces"))
            {
                PrintNamespaces(argsDictionary);
                return;
            }

            string winmd  = argsDictionary["winmd"];
            string outDir = argsDictionary["outdir"];

            bool noDefGen = argsDictionary.ContainsKey("nodefgen");
            bool noBuild  = argsDictionary.ContainsKey("nobuild");
            bool verbose  = argsDictionary.ContainsKey("verbose");

            if (!Directory.Exists(outDir))
            {
                Directory.CreateDirectory(outDir);
            }

            string ns             = ValueOrNull(argsDictionary, "namespace");
            string customWinMdDir = ValueOrNull(argsDictionary, "customwinmddir");

            VsVersions  vsVersion  = VsVersions.Vs2017;
            WinVersions winVersion = WinVersions.v10;

            if (argsDictionary.ContainsKey("vs"))
            {
                if (!Enum.TryParse <VsVersions>(argsDictionary["vs"], true, out vsVersion))
                {
                    Console.WriteLine("Unsupported VS version. Supported options are: VS2017, VS2015, VS2013, VS2012");
                    Environment.Exit(1);
                }
            }

            if (argsDictionary.ContainsKey("winver"))
            {
                if (!NodeRTProjectGenerator.TryParseWinVersion(argsDictionary["winver"], out winVersion))
                {
                    Console.WriteLine("Unssuported Windows version. Supported options are: 10, 8.1, 8");
                    Environment.Exit(1);
                }
            }

            string npmPackageVersion = null;

            if (argsDictionary.ContainsKey("npmversion"))
            {
                npmPackageVersion = argsDictionary["npmversion"];
            }

            string npmPackageScope = null;

            if (argsDictionary.ContainsKey("npmscope"))
            {
                npmPackageScope = argsDictionary["npmscope"];
            }

            String errorMessage = null;

            if (!NodeRTProjectGenerator.VerifyVsAndWinVersions(winVersion, vsVersion, out errorMessage))
            {
                Console.WriteLine("Unssuported Windows and VS versions combination.");
                Console.WriteLine(errorMessage);
                Environment.Exit(1);
            }

            // generate specific namespace
            if (!String.IsNullOrEmpty(ns))
            {
                GenerateAndBuildNamespace(ns, vsVersion, winVersion, winmd,
                                          npmPackageVersion, npmPackageScope,
                                          outDir, noDefGen, noBuild, verbose);
            }
            else // try to generate & build all namespaces in winmd file
            {
                List <String> failedList = new List <string>();
                Console.WriteLine("Started to generate and build all namespaces in given WinMD...\n");
                foreach (string winRtNamespace in Reflector.GetNamespaces(winmd, customWinMdDir))
                {
                    if (!GenerateAndBuildNamespace(winRtNamespace,
                                                   vsVersion, winVersion, winmd,
                                                   npmPackageVersion, npmPackageScope, outDir, noDefGen, noBuild, verbose))
                    {
                        failedList.Add(winRtNamespace);
                    }
                    Console.WriteLine();
                }

                if (failedList.Count > 0)
                {
                    Console.WriteLine("Failed to generate or build for the following namespaces:");
                    foreach (string winRtNamespace in failedList)
                    {
                        Console.WriteLine("\t{0}", winRtNamespace);
                    }
                }
                else
                {
                    Console.WriteLine("Finished!");
                }
            }
        }