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

Posted

技术标签:

【中文标题】为啥 svcutil.exe 的 /reference 选项不起作用?【英文标题】:Why doesn't the /reference option to svcutil.exe work?为什么 svcutil.exe 的 /reference 选项不起作用? 【发布时间】:2011-04-07 12:06:55 【问题描述】:

我正在尝试使用 svcutil.exe 从一组 .wsdl 文件中仅生成服务合同(接口)。当我这样做时(来自 http 托管的 wsdl),它会选择包含的模式并为它们生成所有代码。

太棒了。

然而,我真正想要做的是使用一组已经使用 xsd.exe 工具从架构文件生成的类(这样做的原因并不重要,就足够了说我需要在一个程序集中拥有类型,在另一个程序集中拥有服务合同)。我成功地生成了一个包含所有类型的程序集。

当我尝试让 svcutil.exe 使用该程序集中的类型时,就会出现问题。我的命令行如下所示:

svcutil /target:code /noconfig /reference:my_types.dll http://path/to/wsdl

这工作正常,但生成的代码包含 my_types.dll 文件中所有类型的重复项。我从 svcutil.exe 的文档中了解到,这正是 /reference: 参数要克服的问题。然而,就我而言,它不起作用。

为什么?

【问题讨论】:

【参考方案1】:

显然它只适用于 DataContract 类型而不适用于 XmlSerializer 类型。

Link

【讨论】:

这似乎正是原因。我希望他能更详细地说明为什么存在这种限制,但仍然感谢您的回答! 您是否尝试过针对您的 WSDL 手动运行 WSDL.exe 以生成代理类。删除它生成的类,然后添加对您的类的引用。【参考方案2】:

我遇到了这个问题。我用 /r 引用的二进制文件中的某些内容仍在生成的代码中再次构建。从服务函数之一返回的对象之一是返回数据表或其他类似的可怕东西。我在 System.Data 的整个路径中添加了 /r 并修复了它。

/r:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.5.2\System.Data.dll"

【讨论】:

以上是关于为啥 svcutil.exe 的 /reference 选项不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

使用 xsd.exe 或 svcutil.exe 对 UWP 和 Xamarin 进行 C# XML 序列化

WCF通过SVCUtil.exe生成客户端代理类和配置文件(转)

WCF 使用SvcUtil.exe生成客户端代码和配置

快速创建WCF服务和svcutil.exe工具使用

.Net SvcUtil:属性必须是可选的

WCF引用服务和直接用接口的区别