生成xml到输出目录

从注释生成xml

在要生成xml的项目的csproj中添加如下代码, 生成的xml名称为项目名称.xml. 比如该项目叫做Abp.Application, 则xml名为 Abp.Application.xml

  1. <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
  2. <DocumentationFile>bin\Debug\$(AssemblyName).xml</DocumentationFile>
  3. <OutputPath>bin\Debug\</OutputPath>
  4. </PropertyGroup>
  5. <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
  6. <DocumentationFile>bin\Release\$(AssemblyName).xml</DocumentationFile>
  7. <OutputPath>bin\Release\</OutputPath>
  8. </PropertyGroup>

然后生成就会将xml拷贝到输出目录了

从nuget包中拷贝xml到输出目录

linux下构建需要设置环境变量NUGET_XMLDOC_MODE=none, 在官方文档中有解释NUGET_XMLDOC_MODE的作用

然后修改csproj, 添加如下代码, 构建和发布都会将nuget包中以Abp开头的xml和pdb文件拷贝到输出目录了, 如果是要拷贝所有包的xml和pdb都拷贝过去可以把Abp*.xml改为%(Reference.Filename).xml, pdb文件同理.

  1. <Target Name="CopyReferenceFilesBuild" BeforeTargets="Build">
  2. <ItemGroup>
  3. <ReferenceFiles Include="%(Reference.RelativeDir)Abp*.xml;%(Reference.RelativeDir)Abp*.pdb" />
  4. </ItemGroup>
  5. <Message Text="Copying reference files to $(OutputPath)" Importance="High" />
  6. <Copy SourceFiles="@(ReferenceFiles)" DestinationFolder="$(OutputPath)" Condition="Exists('%(RootDir)%(Directory)%(Filename)%(Extension)')" />
  7. </Target>
  8. <Target Name="CopyReferenceFilesPublish" BeforeTargets="PrepareForPublish">
  9. <ItemGroup>
  10. <ReferenceFiles Include="%(Reference.RelativeDir)Abp*.xml;%(Reference.RelativeDir)Abp*.pdb" />
  11. </ItemGroup>
  12. <Message Text="Copying reference files to $(OutputPath)" Importance="High" />
  13. <Copy SourceFiles="@(ReferenceFiles)" DestinationFolder="$(PublishDir)" Condition="Exists('%(RootDir)%(Directory)%(Filename)%(Extension)')" />
  14. </Target>

swagger添加xml显示注释

加载拷贝到输出目录的xml,在services.AddSwaggerGen的方法中添加如下代码.

GetFiles("*.xml", SearchOption.TopDirectoryOnly)

如果是拷贝了所有的xml,而只想加载以Abp开头的xml文件则可以把.xml改为Abp.xml

  1. //遍历所有xml并加载
  2. var binXmlFiles =
  3. new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory.IsNullOrEmpty()
  4. ? Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location)
  5. : AppDomain.CurrentDomain.BaseDirectory).GetFiles("*.xml", SearchOption.TopDirectoryOnly);
  6. foreach (var filePath in binXmlFiles.Select(item => item.FullName))
  7. {
  8. options.IncludeXmlComments(filePath, true);
  9. }

完整示例

  1. services.AddSwaggerGen(options=>
  2. {
  3. options.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
  4. options.DocInclusionPredicate((docName, description) => true);
  5. options.CustomSchemaIds(type => type.ToString());
  6. //遍历所有xml并加载
  7. var binXmlFiles =
  8. new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory.IsNullOrEmpty()
  9. ? Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location)
  10. : AppDomain.CurrentDomain.BaseDirectory).GetFiles("*.xml", SearchOption.TopDirectoryOnly);
  11. foreach (var filePath in binXmlFiles.Select(item => item.FullName))
  12. {
  13. options.IncludeXmlComments(filePath, true);
  14. }
  15. }

根据注释生成xml和从nuget包中复制xml显示到swagger的更多相关文章

  1. 【原创】使用批处理脚本自动生成并上传NuGet包

    Hello 大家好,我是TANZAME,我们又见面了. NuGet 是什么这里就不再重复啰嗦,园子里一搜一大把.今天要跟大家分享的是,在日常开发过程中如何统一管理我们的包,如何通过批处理脚本生成包并自 ...

  2. android XMl 解析神奇xstream 五: 把复杂对象转换成 xml ,并写入SD卡中的xml文件

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

  3. 容器环境下如何将NuGet包XML文档添加到Swagger

    容器环境下将NuGet包XML文档添加到Swagger 在.NET Core项目开发过程中,为了实现代码复用,我们将可以重复使用的部分拆分成一个个小的NuGet包.这些NuGet包可以在其他系统中复用 ...

  4. nuget类库xml说明以及类库说明文件添加到包中

    1.nuget包制作添加xml操作:项目右键属性,生成配置输出xml文档文件,debug,release都配置一下,项目右键 yesway.redis.csproj 文件增加: 添加类库说明文件con ...

  5. [UWP] 为WinRT组件创建Nuget包

    Nuget 是 dotnet 开发中必不可少的包管理工具,但不仅仅局限于 dotnet 项目,在 VS 中使用 C++ 开发的时候,也可以使用 Nuget 来引用第三方组件.同样也可以用 Nuget ...

  6. .NET Core中创建和使用NuGet包

    在.NET Core的项目中,如果我们要在项目中引用其它DLL文件,不应该直接在项目引用中添加DLL文件(虽然在.NET Core项目中也可以这么做),建议是去直接下载DLL文件所属的NuGet包.这 ...

  7. 项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦)

    知道了 csproj 文件中的一些常用 NuGet 属性,创建 NuGet 包时就可以充分发挥新 Sdk 自动生成 NuGet 包的优势,不需要 nuspec 文件啦.(毕竟 nuspec 文件没有 ...

  8. 自定义Nuget包的技巧一二

    背景: 在项目中, 通常会拆分成核心库(Core)和应用(App)两个部分.核心库由专人维护, 不同的App是不同的团队,但都引用了核心库.当核心库需要升级更新时,有的应用会更新,有的不会--可能是没 ...

  9. 如何使用跨平台工具创建 NuGet 包(转)

    原文地址 https://docs.microsoft.com/zh-cn/dotnet/articles/core/deploying/creating-nuget-packages 内容 对于 . ...

随机推荐

  1. Linux系统查看磁盘可用空间的5个命令

    大家好,我是良许. 工作中,经常会遇到磁盘爆满的情况,尤其是一台服务器运行了 N 年之后,里面会充满各种各样垃圾文件,比如:编译产生的中间文件.打包的镜像文件.日志文件,等等. 别问我怎么知道,我上家 ...

  2. Arduino uno r3 使用 ESP8266 UART-WiFi 透传模块

    一.所需硬件材料 1.ESP8266:01s某宝上3.5块钱 2.杜邦线:某宝几块钱一组40P,这里只需要三根,用于连接 树莓派与继电器 3.烧录器 二.ESP8266 AT固件烧录 ESP8266主 ...

  3. [atAGC043B]123 Triangle

    不妨先操作一轮,使得$0\le a_{i}\le 2$ 结论:若序列中存在1,则答案为0或1 考虑归纳,注意到若序列中存在1,除非所有元素均为1,否则操作一轮后必然仍存在1,那么根据归纳假设即成立,而 ...

  4. [noi253]A

    定义f[i][j]表示从(i,j)走到最后一行的期望,不断从下往上dp那么对于每一行都可以得到m个方程. 但由于这m个方程不是DAG,因此考虑用高斯消元,但时间复杂度不对. 观察方程可以发现如果不断将 ...

  5. 【论文阅读】Beyond OCR + VQA: 将OCR融入TextVQA的执行流程中形成更鲁棒更准确的模型

    论文题目:Beyond OCR + VQA: Involving OCR into the Flow for Robust and Accurate TextVQA 论文链接:https://dl.a ...

  6. Stream流的使用

    创建流 创建流的方式很多,从jdk8起,很多类中添加了一些方法来创建相应的流,比如:BufferedReader类的lines()方法:Pattern类的splitAsStream方法.但是开发中使用 ...

  7. BehaviorTree.CPP行为树BT的装饰器节点(五)

    Decorators 装饰器是只能有一个子项的节点. 由装饰者来决定是否,何时以及对子节点进行tick. InverterNode tick子节点一次,如果子节点失败则返回SUCCESS,如果孩子成功 ...

  8. 洛谷 P7323 - [WC2021] 括号路径(启发式合并)

    题面传送门 emmmm----怎么评价这个题嘛...感觉纯论算法,此题根本谈不上难题,不过 WC 时候太智障只拿了个 48pts 就走人了.总之,技不如人,甘拜吓疯( 首先要注意到几件事情: 如果 \ ...

  9. Yet Another Minimization Problem

    Yet Another Minimization Problem 一个很显然的决策单调性. 方程是很显然的 $ f_i = \min{f_{j-1} + w(j,i)} $ . 它具有决策单调性,可以 ...

  10. JS设计模式之建造者模式

    建造者模式(builder pattern)属于创建型模式的一种,提供一种创建复杂对象的方式.它将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 建造者模式是一步一步的创建 ...