在 SvcUtil 和 WSDL 代码生成期间抓取 KnownType 属性

Posted

技术标签:

【中文标题】在 SvcUtil 和 WSDL 代码生成期间抓取 KnownType 属性【英文标题】:Scraping KnownType attributes during SvcUtil and WSDL Code generation 【发布时间】:2019-01-16 05:33:51 【问题描述】:

我有一个带有用于元数据的 mex 端点的 WCF 服务。我通过 Visual Studio 使用 SvcUtil 在服务运行时生成客户端数据合同代码 (C#)。 SvcUtil 为继承和引用的类型添加 KnownType 属性。我有一个自定义数据合同解析器,对这些已知类型没有用处。如何使 SvcUtil 或 WSDL Importer 不使用 KnownType 属性标记所有这些类型?我最坏的情况是在代码生成后遍历文件并删除这些属性,但我希望有一种更简洁的方法来做到这一点。

【问题讨论】:

您是否在 WCF 源代码中使用 ServiceKnownTypeAttribute? 是的,我在服务端使用ServiceKnownTypeAttribute 通常情况下,我建议删除服务器端 ServiceKnownTypeAttributes。在这种情况下,我不确定这会产生什么影响。我在下面提供了一个替代解决方案。 【参考方案1】:

一个选项是add the known types to a configuration file。配置文件不需要是您的 app.config(或 web.config)。可以叫dummy.config

运行svcutil.exe时,添加以下参数/svcutilConfig:dummy.config。生成客户端代码后,您的 KnownType 属性应该会消失。

这是registering known types using a configuration file.的另一个例子

【讨论】:

谢谢。我试图从一代中删除已知的类型属性,同时仍保留声明的类型。从配置文件中,我可以清除声明的类型,但我无法清除已知类型,除非我手动编写每个声明的类型,然后清除它们各自的已知类型,这是不可行的。除非我在这里遗漏了什么...... 我实际上只是在考虑那部分。您必须手动创建(和维护)配置文件。一种选择是基于 WCF 元数据创建 T4 模板。这不是灵丹妙药,但我认为它回答了您最初的问题。 您找到替代解决方案了吗? 不幸的是,这不是一个优雅的。目前坚持在生成后清理代码。

以上是关于在 SvcUtil 和 WSDL 代码生成期间抓取 KnownType 属性的主要内容,如果未能解决你的问题,请参考以下文章

svcutil.exe 未为 minOccurs=0 生成指定字段

WCF 服务 + SvcUtil 生成意外的对象结构

为啥 svcutil.exe 的 /reference 选项不起作用?

无法使用 VIsual Studio 2019 安装 dotnet-svcutil 来注册 wsdl 服务

从 ASMX Web 服务导入 wsdl 时出现 WsdlImporter 错误

无法在 Mono 中编译 svcutil 生成的 C#