You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在基于Swagger生成UWP客户端代理时复用已有程序集类?

解决VS生成REST API客户端时重复生成共享类的问题

嘿,我太懂这种重复生成类的糟心了——明明手里已经有维护好的共享类库,结果工具还非要再生成一套一模一样的,不仅冗余还容易搞出命名冲突!别着急,咱们来一步步搞定它:

方法1:生成时直接配置重用共享类(最推荐)

其实在VS的REST API客户端生成向导里,就藏着重用已有类型的选项,只是很多人没注意到:

  • 当你走到输入Swagger端点后的「下一步」,找到高级选项按钮点进去。
  • 在弹出的窗口里,找到「重用类型」区域,点击「添加」。
  • 选择你的共享类库项目,然后指定要重用的命名空间(可以选整个命名空间,也可以选特定类)。
  • 还可以勾选「仅生成引用的类型」,这样工具只会生成那些共享库中没有、但API调用必须的类型,彻底减少冗余。

完成这些设置后再生成代码,工具就会自动引用你共享库中的类,而不是重新生成啦!

方法2:修改生成后的配置文件微调

如果已经生成了代码,也不用删了重来,直接修改生成的配置文件就行:

  • 你的项目里会多出一个类似YourApiName.openapi.config或者YourApiName.swagger.config的文件。
  • 打开它,找到<SharedTypes>节点(如果没有就自己加),配置你的共享类库信息:
    <SharedTypes>
      <SharedType Assembly="YourSharedClassLibrary" Namespace="Your.Shared.Namespace" />
    </SharedTypes>
    
  • 再把<GenerateModels>节点的值改成false,这样就完全不会生成模型类了,全部用共享库的。

方法3:处理个别命名冲突

如果还是有少数类出现冲突,试试这两个小技巧:

  • 在共享类上添加[DataContract(Name = "ExactModelNameFromSwagger")](如果用的是DataContract序列化),或者[JsonPropertyName("ExactModelNameFromSwagger")](System.Text.Json的话),让类名和Swagger里的模型名称完全匹配,工具就会自动识别并重用。
  • 或者在配置文件里用<TypeRenames>节点,给生成的类重命名,避开冲突:
    <TypeRenames>
      <Rename OldName="ConflictingModel" NewName="GeneratedConflictingModel" />
    </TypeRenames>
    

方法4:换用更灵活的NSwag工具

如果VS自带的工具不够灵活,推荐试试NSwag——这是一款专门处理Swagger/OpenAPI的代码生成工具,对类型重用的支持更精细:

  • 可以安装NSwag的VS扩展,或者用CLI工具。
  • 编写一个nswag.json配置文件,在CSharp生成器设置里添加"reuseTypesFromAssemblies",指定你的共享类库路径,再设置"reuseTypes"为true。
  • 运行生成命令,就能完全控制哪些类生成、哪些重用,自由度拉满。

内容的提问来源于stack exchange,提问作者Phil Wright

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:36:29