// put dll & xml on same diretory.
        private static void Main(string[] args)
        {
            //output path for documentation
            var dest = "md";
            //namespace regex
            var namespaceMatch = "*.Controllers";
            //class regex
            var classMatch = ".*Controller";
            //dll path which will be documented
            var dllPath = @"C:\example\example.dll";

            var assembly                 = Assembly.LoadFrom(dllPath);
            var commentsLookup           = MarkdownGenerator.GetCommentsLookup(assembly);
            var referencedModelContainer = new ReferencedModelContainer(commentsLookup);
            var types = MarkdownGenerator.Load(assembly, namespaceMatch, classMatch, referencedModelContainer, commentsLookup);

            // Home Markdown Builder
            var homeBuilder = new MarkdownBuilder();

            homeBuilder.Header(1, "References");
            homeBuilder.AppendLine();

            foreach (var g in types.GroupBy(x => x.Namespace).OrderBy(x => x.Key))
            {
                if (!Directory.Exists(dest))
                {
                    Directory.CreateDirectory(dest);
                }

                homeBuilder.HeaderWithLink(2, g.Key, g.Key);
                homeBuilder.AppendLine();

                var mb = new MarkdownBuilder();
                mb.Header(1, "Usage Documentation");
                mb.Header(2, "Controllers and Actions");
                foreach (var item in g.OrderBy(x => x.Name))
                {
                    homeBuilder.ListLink(MarkdownBuilder.MarkdownCodeQuote(item.BeautifyName), g.Key + "#" + item.BeautifyName.Replace("<", "").Replace(">", "").Replace(",", "").Replace(" ", "-").ToLower());

                    mb.Append(item.ToString());
                }
                mb.Header(2, "Referenced Types");
                mb.Append(referencedModelContainer.ToString());
                var result = Markdig.Markdown.Normalize(mb.ToString());
                File.WriteAllText(Path.Combine(dest, g.Key + ".md"), result);
                homeBuilder.AppendLine();
            }

            // Gen Home
            File.WriteAllText(Path.Combine(dest, "Home.md"), homeBuilder.ToString());
        }
        private string GenericAsLink()
        {
            var typeName = Regex.Replace(_genericType.Name, @"`.+$", "");
            var md       = new MarkdownBuilder();

            if (_isCursorLink)
            {
                var link = $@"{typeName}{LtChar}{string.Join(",", _args.Select(c => c.Name))}{GtChar}";
                md.CursorLink(link);
            }
            else
            {
                md.Append(typeName);
                md.Append(LtChar);
                md.Append(string.Join(",", _args.Select(c => new MarkdownableTypeName(c).AsLink())));
                md.Append(GtChar);
            }
            return(md.ToString());
        }