Exemplo n.º 1
0
        // currently unused
        public static void PrintPJ(ProjectLockJson pj)
        {
            foreach (var targetPair in pj.targets)
            {
                string targetName = targetPair.Key;
                Console.WriteLine($"target: {targetName}:");

                foreach (var nugetPair in targetPair.Value)
                {
                    string nugetPackageNameAndVersion    = nugetPair.Key;
                    NugetPackageDescription ndescription = nugetPair.Value;
                    Console.WriteLine($"\tpkg name: {nugetPackageNameAndVersion}");

                    string[] nuPkgNameParts = nugetPackageNameAndVersion.Split(new char[] { '/' });
                    if (nuPkgNameParts.Length != 2)
                    {
                        Console.WriteLine($"Warning: Improper package name format: {nugetPackageNameAndVersion}");
                        continue;
                    }

                    string nuPkgName    = nuPkgNameParts[0];
                    string nuPkgVersion = nuPkgNameParts[1];

                    Console.WriteLine($"\t\tname={nuPkgName}");
                    Console.WriteLine($"\t\tver.={nuPkgVersion}");

                    Console.WriteLine("\t\tdependencies:");
                    if (ndescription.dependencies != null)
                    {
                        foreach (var dep in ndescription.dependencies)
                        {
                            string dependencyName    = dep.Key;
                            string dependencyVersion = dep.Value;
                            Console.WriteLine($"\t\t\t{dependencyName} : {dependencyVersion}");
                        }
                    }

                    Console.WriteLine("\t\tcompile refs:");
                    if (ndescription.compile != null)
                    {
                        foreach (var compileAssemblies in ndescription.compile)
                        {
                            string refAssemblyName = compileAssemblies.Key;
                            Console.WriteLine($"\t\t\tref name: {refAssemblyName}");
                        }
                    }

                    Console.WriteLine("\t\truntime refs:");
                    if (ndescription.runtime != null)
                    {
                        foreach (var runtimeAssemblies in ndescription.runtime)
                        {
                            string refAssemblyName = runtimeAssemblies.Key;
                            Console.WriteLine($"\t\t\tref name: {refAssemblyName}");
                        }
                    }
                }
            }
        }
Exemplo n.º 2
0
        static void Main(string[] args)
        {
            Dictionary <string, string> parsedArgs = ParseCommandLineArgs(args);

            if (parsedArgs == null || !EnsureDictionaryHasKeys(parsedArgs, new string[] { "pj", "nupkg", "tfm", "out" }))
            {
                Console.WriteLine("Usage: pjviz.exe --pj <path/to/project.lock.json> --nupkg <NuGet package name> --tfm <TFM> --out <path/to/out.dgml>");
                Console.WriteLine("Example: pjviz.exe --pj project.lock.json --nupkg System.Runtime --tfm .NETStandardApp,Version=v1.5/win7-x64 --out test.dgml");
                return;
            }

            string lockJsonFile = parsedArgs["pj"];
            string pkgName      = parsedArgs["nupkg"];
            string tfm          = parsedArgs["tfm"];
            string dgmlPath     = parsedArgs["out"];

            ProjectLockJson pj = JsonConvert.DeserializeObject <ProjectLockJson>(File.ReadAllText(lockJsonFile));

            using (FileStream xmlFile = new FileStream(dgmlPath, FileMode.Create, FileAccess.Write))
            {
                XmlWriterSettings settings = new XmlWriterSettings();
                settings.Indent = true;
                StreamWriter sw = new StreamWriter(xmlFile);
                using (XmlWriter xml = XmlWriter.Create(sw, settings))
                {
                    xml.WriteStartDocument();
                    xml.WriteStartElement("DirectedGraph", "http://schemas.microsoft.com/vs/2009/dgml");

                    xml.WriteStartElement("Nodes");
                    HashSet <string> nuPkgNames = new HashSet <string>();
                    foreach (var targetPair in pj.targets)
                    {
                        string targetName = targetPair.Key;
                        if (targetName != tfm)
                        {
                            continue;
                        }

                        foreach (var nugetPair in targetPair.Value)
                        {
                            string nugetPackageNameAndVersion    = nugetPair.Key;
                            NugetPackageDescription ndescription = nugetPair.Value;

                            string[] nuPkgNameParts = nugetPackageNameAndVersion.Split(new char[] { '/' });
                            if (nuPkgNameParts.Length != 2)
                            {
                                Console.WriteLine($"Warning: Improper package name format: {nugetPackageNameAndVersion}");
                                continue;
                            }

                            string nuPkgName    = nuPkgNameParts[0];
                            string nuPkgVersion = nuPkgNameParts[1];
                            xml.WriteStartElement("Node");
                            xml.WriteAttributeString("Id", nuPkgName);
                            xml.WriteAttributeString("Label", nuPkgName + "\n" + nuPkgVersion);
                            if (nuPkgName == pkgName)
                            {
                                xml.WriteAttributeString("Background", "#FF008080");
                            }
                            xml.WriteEndElement();
                            nuPkgNames.Add(nuPkgName);

                            if (ndescription.dependencies != null)
                            {
                                foreach (var dep in ndescription.dependencies)
                                {
                                    string dependencyName    = dep.Key;
                                    string dependencyVersion = dep.Value;
                                }
                            }
                        }
                    }
                    xml.WriteEndElement();

                    xml.WriteStartElement("Links");
                    foreach (var targetPair in pj.targets)
                    {
                        string targetName = targetPair.Key;
                        if (targetName != tfm)
                        {
                            continue;
                        }

                        foreach (var nugetPair in targetPair.Value)
                        {
                            string nugetPackageNameAndVersion    = nugetPair.Key;
                            NugetPackageDescription ndescription = nugetPair.Value;

                            string[] nuPkgNameParts = nugetPackageNameAndVersion.Split(new char[] { '/' });
                            if (nuPkgNameParts.Length != 2)
                            {
                                continue;
                            }

                            string nuPkgName    = nuPkgNameParts[0];
                            string nuPkgVersion = nuPkgNameParts[1];

                            if (ndescription.dependencies != null)
                            {
                                foreach (var dep in ndescription.dependencies)
                                {
                                    string dependencyName    = dep.Key;
                                    string dependencyVersion = dep.Value;

                                    if (!nuPkgNames.Contains(dependencyName))
                                    {
                                        Console.WriteLine($"Warning: {nuPkgName} ({nuPkgVersion}) -> [MISSING] {dependencyName} (dependencyVersion)");
                                        continue;
                                    }

                                    xml.WriteStartElement("Link");
                                    xml.WriteAttributeString("Source", nuPkgName);
                                    xml.WriteAttributeString("Target", dependencyName);
                                    xml.WriteAttributeString("Label", $"Target version: {dependencyVersion}");
                                    xml.WriteEndElement();
                                }
                            }
                        }
                    }
                    xml.WriteEndElement();
                }
            }
        }