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

问题描述

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

问题原因

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

解决方案

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

具体实现

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

  <PropertyGroup>
    <GenerateDocumentationFile>true</GenerateDocumentationFile>
  </PropertyGroup>

合并文档代码

            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);

缺陷

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,384评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,327评论 25 709
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,040评论 3 119
  • 1.标识符 在java中有些名字是可以自定义的,如类名、接口名、常量、变量、包名等。称为自定义标识符 需注意的细节...
    CCChaya阅读 2,784评论 0 0
  • 小时候,幸福是件简单的事,长大后,简单是很幸福的事。 小时候,我的幸福就是雨后在小石子路捡漂亮的小石头,爬山上最大...
    葶瞸阅读 1,774评论 0 0