asp.net core webapi多项目解决方案Swagger注释无法获取解决方案

问题描述

在webapi项目中使用swagger作为接口文档是个很好的选择,但是有时候会遇到一些小问题。在单项目中大家都知道swagger会解析项目生成的xml注释文件,将注释添加到接口信息。但是如果分成多个项目会遇到注释只会在webapi项目中有解析,依赖的项目中的注释无法解析的情况。

问题原因

在配置swagger过程中,为了加入注释,需要引入项目生成的xml注释文档。但是一个项目的注释文档只会生成自身的注释文档。他依赖的项目注释并不会放入。于是乎swagger就认为你引用的Model没有注释。当然不会有描述了。

解决方案

其实很简单的思路。在项目启动文件里,执行文档合并的代码。将依赖的项目文档合并到主项目的文档中去。

具体实现

在各个需要生成注释文档的csproj文件里加入如下节点

  
    true
  

合并文档代码

            var directory = AppDomain.CurrentDomain.BaseDirectory;
            // 找到所有的注释文档, 根据你的项目情况加上通配符。
            var files = Directory.GetFiles(directory, "XXX.xml").ToList();
           // 找到你的主项目注释文档
            var mainFile = files.Where(u => u.Contains("XXXMain.xml")).FirstOrDefault();
            if (string.IsNullOrEmpty(mainFile))
                return;
            files.Remove(mainFile);
            if (files.Count == 0)
                return;
            var mainDoc = new XmlDocument();
            mainDoc.Load(mainFile);
            var membersNode = mainDoc.SelectSingleNode("//members");
            files.ForEach(file => {
                var doc = new XmlDocument();
                doc.Load(file);
                var nodes = doc.SelectNodes("//member");
                foreach(XmlNode node in nodes)
                {
                    var importNode = mainDoc.ImportNode(node, true);
                    membersNode.AppendChild(importNode);
                }
            });
            files.ForEach(u =>
            {
                File.Delete(u);
            });
            mainDoc.Save(mainFile);

缺陷

会导致应用启动会慢一点。

你可能感兴趣的:(asp.net core webapi多项目解决方案Swagger注释无法获取解决方案)