NSwag CLI配置:如何通过nswag.json传递自定义TypeNameGenerator
解决NSwag CLI配置自定义TypeNameGenerator的问题
核心问题原因
NSwag CLI加载自定义类型生成器时,需要满足三个关键条件:
- 自定义类必须编译为独立的可加载程序集(类库形式)
- 配置中指定的类型全名和程序集名称必须完全匹配
- NSwag CLI能定位到该程序集的路径
步骤1:将CustomTypeNameGenerator编译为类库
把你的CustomTypeNameGenerator类迁移到一个类库项目(例如命名为MyNSwagExtensions),编译生成MyNSwagExtensions.dll。Web项目的编译输出依赖复杂,直接用其中的类会导致NSwag无法加载。
步骤2:修改nswag.json配置
在codeGenerators.openApiToCSharpClient节点下添加typeNameGenerator配置,格式为[完整类型名], [程序集名称](程序集名称不带.dll后缀):
{ "runtime": "Net70", "defaultVariables": null, "documentGenerator": { "fromDocument": { "json": "./wwwroot/Architecture/json-schemas/swagger.json", "flattenInheritanceHierarchy": false } }, "codeGenerators": { "openApiToCSharpClient": { "clientBaseClass": null, "generateClientClasses": true, "generateClientInterfaces": true, "clientBaseInterface": null, "injectHttpClient": true, "disposeHttpClient": false, "jsonLibrary": "SystemTextJson", "output": "Client.cs", "namespace": "Mynamespace", "typeNameGenerator": "MyNSwagExtensions.CustomTypeNameGenerator, MyNSwagExtensions" } } }
步骤3:确保NSwag CLI能找到程序集
任选一种方式让NSwag定位到你的类库:
- 将类库DLL复制到NSwag CLI的安装目录(例如
%USERPROFILE%\.dotnet\tools\.store\nswag\对应的版本路径\net70) - 在MSBuild的Exec命令中添加
/assemblyPath参数指定类库路径:<Exec Command="$(NSwagExe_Net70) run $(NSwagConfiguration) /variables:OpenApiDocument=$(OpenApiDocument),GeneratedOutput=$(GeneratedOutput) /assemblyPath:$(SolutionDir)MyNSwagExtensions\bin\$(Configuration)\net7.0\MyNSwagExtensions.dll" /> - 将类库输出目录添加到系统环境变量
PATH中
步骤4:调整MSBuild依赖顺序
在Web项目的项目文件中添加类库项目的依赖,确保类库在NSwag目标执行前完成编译:
<ItemGroup> <ProjectReference Include="..\MyNSwagExtensions\MyNSwagExtensions.csproj" /> </ItemGroup>
完成以上配置后,NSwag就能加载自定义类型生成器,自动截取完全限定名的最后部分作为生成类的名称。
内容的提问来源于stack exchange,提问作者Gipe
相关产品推荐
相关产品推荐

