Ejemplo n.º 1
0
        private static XDocument GetApiInfoDocument(string assembly, ApiInfoConfig config, out bool wasXml)
        {
            try
            {
                using (var stream = new MemoryStream())
                {
                    using (var writer = new StreamWriter(stream, new UTF8Encoding(false), 1024, true))
                    {
                        ApiInfo.Generate(assembly, writer, config);
                    }

                    stream.Position = 0;
                    wasXml          = false;
                    return(XDocument.Load(stream));
                }
            }
            catch (BadImageFormatException)
            {
            }

            try
            {
                wasXml = true;
                return(XDocument.Load(assembly));
            }
            catch (XmlException)
            {
            }

            throw new InvalidOperationException($"Unable to load {assembly} as it was neither a .NET assembly nor an XML API info file.");
        }
Ejemplo n.º 2
0
        private Stream GenerateAssemblyApiInfo(Stream assemblyStream)
        {
            // try loading the file as an assembly, and then create the API info
            try
            {
                assemblyStream.Position = 0;

                var config = new ApiInfoConfig
                {
                    IgnoreResolutionErrors = true
                };

                var info = new MemoryStream();

                using (var writer = new StreamWriter(info, UTF8NoBOM, DefaultSaveBufferSize, true))
                {
                    ApiInfo.Generate(assemblyStream, writer, config);
                }

                assemblyStream.Position = 0;
                info.Position           = 0;

                return(info);
            }
            catch (BadImageFormatException)
            {
            }

            // try loading as an API info
            try
            {
                assemblyStream.Position = 0;

                var xdoc = XDocument.Load(assemblyStream);

                assemblyStream.Position = 0;

                return(assemblyStream);
            }
            catch (XmlException)
            {
            }

            throw new InvalidOperationException("Input was in an incorrect format.");
        }
        private Stream GenerateAssemblyApiInfo(Stream assemblyStream)
        {
            var config = new ApiInfoConfig
            {
                IgnoreResolutionErrors = true
            };

            var info = new MemoryStream();

            using (var writer = new StreamWriter(info, UTF8NoBOM, DefaultSaveBufferSize, true))
            {
                ApiInfo.Generate(assemblyStream, writer, config);
            }

            assemblyStream.Position = 0;
            info.Position           = 0;

            return(info);
        }
Ejemplo n.º 4
0
        protected override bool OnInvoke(IEnumerable <string> extras)
        {
            if (Program.Verbose)
            {
                Console.WriteLine($"Comparing the following assemblies:");
                foreach (var assembly in Assemblies)
                {
                    Console.WriteLine($" - {assembly}");
                }

                if (Directories.Count > 0)
                {
                    Console.WriteLine($"Using the following search diectories:");
                    foreach (var directory in Directories)
                    {
                        Console.WriteLine($" - {directory}");
                    }
                }
            }

            var infoStreams = new List <Stream>();

            {
                var config = new ApiInfoConfig
                {
                    IgnoreResolutionErrors = !alwaysResolve,
                    SearchDirectories      = Directories,
                };

                foreach (var assembly in Assemblies)
                {
                    if (Program.Verbose)
                    {
                        Console.WriteLine($"Generating API info for {assembly}...");
                    }

                    var xdoc = GetApiInfoDocument(assembly, config, out var wasXml);

                    if (!wasXml && outputApi)
                    {
                        xdoc.Save(assembly + ".api.xml");
                    }

                    // in order to compare assemblies, they have to be the same name
                    var xass = xdoc.Element("assemblies").Element("assembly");
                    xass.SetAttributeValue("name", "Assembly");

                    var stream = new MemoryStream();
                    xdoc.Save(stream);
                    stream.Position = 0;

                    infoStreams.Add(stream);
                }
            }

            GenerateDiff(xmlDiff, writer =>
            {
                if (Program.Verbose)
                {
                    Console.WriteLine($"Generating XML diff at {xmlDiff}...");
                }

                infoStreams[0].Position = 0;
                infoStreams[1].Position = 0;
                ApiDiff.Generate(infoStreams[0], infoStreams[1], writer);
            });
            GenerateDiff(htmlDiff, writer =>
            {
                if (Program.Verbose)
                {
                    Console.WriteLine($"Generating HTML diff at {htmlDiff}...");
                }

                infoStreams[0].Position = 0;
                infoStreams[1].Position = 0;
                var config = new ApiDiffFormattedConfig
                {
                    Colorize                   = true,
                    Formatter                  = ApiDiffFormatter.Html,
                    IgnoreNonbreaking          = excludeNonbreaking,
                    IgnoreParameterNameChanges = excludeParameterNames,
                };
                ApiDiffFormatted.Generate(infoStreams[0], infoStreams[1], writer, config);
            });
            GenerateDiff(mdDiff, writer =>
            {
                if (Program.Verbose)
                {
                    Console.WriteLine($"Generating Markdown diff at {mdDiff}...");
                }

                infoStreams[0].Position = 0;
                infoStreams[1].Position = 0;
                var config = new ApiDiffFormattedConfig
                {
                    Formatter                  = ApiDiffFormatter.Markdown,
                    IgnoreNonbreaking          = excludeNonbreaking,
                    IgnoreParameterNameChanges = excludeParameterNames,
                };
                ApiDiffFormatted.Generate(infoStreams[0], infoStreams[1], writer, config);
            });

            return(true);
        }