根据注释生成xml和从nuget包中复制xml显示到swagger
生成xml到输出目录
从注释生成xml
在要生成xml的项目的csproj中添加如下代码, 生成的xml名称为项目名称.xml. 比如该项目叫做Abp.Application, 则xml名为 Abp.Application.xml
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<DocumentationFile>bin\Debug\$(AssemblyName).xml</DocumentationFile>
<OutputPath>bin\Debug\</OutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<DocumentationFile>bin\Release\$(AssemblyName).xml</DocumentationFile>
<OutputPath>bin\Release\</OutputPath>
</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文件同理.
<Target Name="CopyReferenceFilesBuild" BeforeTargets="Build">
<ItemGroup>
<ReferenceFiles Include="%(Reference.RelativeDir)Abp*.xml;%(Reference.RelativeDir)Abp*.pdb" />
</ItemGroup>
<Message Text="Copying reference files to $(OutputPath)" Importance="High" />
<Copy SourceFiles="@(ReferenceFiles)" DestinationFolder="$(OutputPath)" Condition="Exists('%(RootDir)%(Directory)%(Filename)%(Extension)')" />
</Target>
<Target Name="CopyReferenceFilesPublish" BeforeTargets="PrepareForPublish">
<ItemGroup>
<ReferenceFiles Include="%(Reference.RelativeDir)Abp*.xml;%(Reference.RelativeDir)Abp*.pdb" />
</ItemGroup>
<Message Text="Copying reference files to $(OutputPath)" Importance="High" />
<Copy SourceFiles="@(ReferenceFiles)" DestinationFolder="$(PublishDir)" Condition="Exists('%(RootDir)%(Directory)%(Filename)%(Extension)')" />
</Target>
swagger添加xml显示注释
加载拷贝到输出目录的xml,在services.AddSwaggerGen的方法中添加如下代码.
GetFiles("*.xml", SearchOption.TopDirectoryOnly)
如果是拷贝了所有的xml,而只想加载以Abp开头的xml文件则可以把.xml改为Abp.xml
//遍历所有xml并加载
var binXmlFiles =
new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory.IsNullOrEmpty()
? Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location)
: AppDomain.CurrentDomain.BaseDirectory).GetFiles("*.xml", SearchOption.TopDirectoryOnly);
foreach (var filePath in binXmlFiles.Select(item => item.FullName))
{
options.IncludeXmlComments(filePath, true);
}
完整示例
services.AddSwaggerGen(options=>
{
options.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
options.DocInclusionPredicate((docName, description) => true);
options.CustomSchemaIds(type => type.ToString());
//遍历所有xml并加载
var binXmlFiles =
new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory.IsNullOrEmpty()
? Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location)
: AppDomain.CurrentDomain.BaseDirectory).GetFiles("*.xml", SearchOption.TopDirectoryOnly);
foreach (var filePath in binXmlFiles.Select(item => item.FullName))
{
options.IncludeXmlComments(filePath, true);
}
}
根据注释生成xml和从nuget包中复制xml显示到swagger的更多相关文章
- 【原创】使用批处理脚本自动生成并上传NuGet包
Hello 大家好,我是TANZAME,我们又见面了. NuGet 是什么这里就不再重复啰嗦,园子里一搜一大把.今天要跟大家分享的是,在日常开发过程中如何统一管理我们的包,如何通过批处理脚本生成包并自 ...
- android XMl 解析神奇xstream 五: 把复杂对象转换成 xml ,并写入SD卡中的xml文件
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
- 容器环境下如何将NuGet包XML文档添加到Swagger
容器环境下将NuGet包XML文档添加到Swagger 在.NET Core项目开发过程中,为了实现代码复用,我们将可以重复使用的部分拆分成一个个小的NuGet包.这些NuGet包可以在其他系统中复用 ...
- nuget类库xml说明以及类库说明文件添加到包中
1.nuget包制作添加xml操作:项目右键属性,生成配置输出xml文档文件,debug,release都配置一下,项目右键 yesway.redis.csproj 文件增加: 添加类库说明文件con ...
- [UWP] 为WinRT组件创建Nuget包
Nuget 是 dotnet 开发中必不可少的包管理工具,但不仅仅局限于 dotnet 项目,在 VS 中使用 C++ 开发的时候,也可以使用 Nuget 来引用第三方组件.同样也可以用 Nuget ...
- .NET Core中创建和使用NuGet包
在.NET Core的项目中,如果我们要在项目中引用其它DLL文件,不应该直接在项目引用中添加DLL文件(虽然在.NET Core项目中也可以这么做),建议是去直接下载DLL文件所属的NuGet包.这 ...
- 项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦)
知道了 csproj 文件中的一些常用 NuGet 属性,创建 NuGet 包时就可以充分发挥新 Sdk 自动生成 NuGet 包的优势,不需要 nuspec 文件啦.(毕竟 nuspec 文件没有 ...
- 自定义Nuget包的技巧一二
背景: 在项目中, 通常会拆分成核心库(Core)和应用(App)两个部分.核心库由专人维护, 不同的App是不同的团队,但都引用了核心库.当核心库需要升级更新时,有的应用会更新,有的不会--可能是没 ...
- 如何使用跨平台工具创建 NuGet 包(转)
原文地址 https://docs.microsoft.com/zh-cn/dotnet/articles/core/deploying/creating-nuget-packages 内容 对于 . ...
随机推荐
- 实验1:SDN拓扑拓扑实验
一.实验目的 能够使用源码安装Mininet: 能够使用Mininet的可视化工具生成拓扑: 能够使用Mininet的命令行生成特定拓扑: 能够使用Mininet交互界面管理SDN拓扑: 能够使用Py ...
- 运行脚本 结果出现 Vim: Warning 并且卡住不能输入其它命令
当我在执行一个 关于执行linux操作的php脚本时,就出现了以下信息:"Vim: Warning: Output is not to a terminal",接着出现了一大堆的字 ...
- Effective C++ 总结笔记(三)
三.资源管理 13.以对象管理资源 1.为了防止资源泄漏,请使用RAII对象,在构造函数里面获得资源,并在析构函数里面释放资源. 2. 引用计数型智慧指针(RCSP):持续追踪多少个指针指向该资源,无 ...
- 菜鸡的Java笔记 第三十二 - java 静态导入的实现
静态导入的实现 为了理解静态导入的操作产生的动机,下面通过一个具体的代码来观察 范例:现在有一个 Import 的类,这个类中的方法全部都是 static 方法 packa ...
- OpenShift 本地开发环境配置(基于 Minishift)
本文要做什么? 很多为了验证应用在 OpenShift 平台的行为是否正常,或者组成一个简单的开发环境,直接搭建一个 OpenShift/Origin 环境可能太重了,而且运行在本机可能占用内存也太多 ...
- vite2 + vite.config.js 比较坑的环境变量,vite2模式的使用
想在vite.config.js 里面判断一下环境,看看是不是开发环境,查了一下官网(https://cn.vitejs.dev/guide/env-and-mode.html),说是 可以使用 im ...
- [loj2863]组合动作
先用两次猜出第一个字符,后面就不会出现这个字符了 (我们假设这个字符是c0,其余三种字符分别是c1.c2和c3) ,然后考虑已知s的前i个字符(不妨就s),来推出后面的字符 询问:s+c1和s+c2, ...
- Nocalhost 为 KubeSphere 提供更强大的云原生开发环境
作者简介 张海立(驭势科技云平台研发总监):开源爱好者,云原生社区上海站 PMC 成员,KubeSphere Ambassador:日常云原生领域工作涉及 Kubernetes.DevOps.可观察性 ...
- zabbix 内网机器通信状态
a=0 for xgip in ${xgipset[*]} do let a+=1 fping $xgip|grep alive >/dev/null if [ $a != 3 ];then i ...
- 47-Generate Parentheses
Generate Parentheses My Submissions QuestionEditorial Solution Total Accepted: 86957 Total Submissio ...