【问题标题】:Why SvcUtil.exe does not generate References.cs if I pass /reference parameter?如果我传递 /reference 参数,为什么 SvcUtil.exe 不会生成 References.cs?
【发布时间】:2013-04-03 21:03:54
【问题描述】:

我观察到 SvcUtils.exe 的奇怪行为。

如果我在那里传递 /reference 参数,由于某种原因它不会生成 *.cs 文件。

C:\test>"C:\Program Files\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\SvcUtil.exe" /t:code http://localhost/Api/Common.svc /r:Api.dll
Microsoft (R) Service Model Metadata Tool
[Microsoft (R) Windows (R) Communication Foundation, Version 4.0.30319.17929]
Copyright (c) Microsoft Corporation.  All rights reserved.

Attempting to download metadata from 'http://localhost/Api/Common.svc' using WS-Metadata Exchange or DISCO.
Generating files...
C:\test\output.config

同时,如果我去掉参数,它会正常生成。

C:\test>"C:\Program Files\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\SvcUtil.exe" /t:code http://localhost/Api/Common.svc
Microsoft (R) Service Model Metadata Tool
[Microsoft (R) Windows (R) Communication Foundation, Version 4.0.30319.17929]
Copyright (c) Microsoft Corporation.  All rights reserved.

Attempting to download metadata from 'http://localhost/Api/Common.svc' using WS-Metadata Exchange or DISCO.
Generating files...
C:\test\CommonService.cs
C:\test\output.config    

为什么? 如何从 Api.dll 中获取 Api.svc 中使用的类在 CommonService.cs 中生成?

UPD。让我添加一些在我看来显而易见但仍然重要的细节。 Api.dll 组件包括用 [DataContract] 属性标记的类以及用 [DataMember] 属性标记的属性。这些类是从 Api.svc 中可见的方法返回的。我的目标是在生成的代理代码中重用来自 Api.dll 的类。

为什么我觉得这种行为很奇怪?它通常为没有重用的服务生成代理类,但是如果我添加 /r 参数来重用类,它根本拒绝生成代码。所以问题是做错了什么?获得这种行为可能会做错什么以及如何正确地实现目标?

UPD2。最奇怪的是,使用选中的“重用”选项从 Visual Studio 更新引用非常有效。

【问题讨论】:

    标签: svcutil.exe


    【解决方案1】:

    我遇到了同样的问题。我实际上使用的是 svcutil,因为 Visual Studio 给了我错误,即无法创建 WCF 引用的代码并且没有提供更多信息。我最终在 VS 中启用了警告,这给了我更多信息。事实证明,我正在引用一个本身引用 WCF 服务的程序集。因此,某些类型被包含两次。然后类型的映射失败。我所做的是配置引用了哪些程序集。因此,我只选择了 WCF 服务,然后选择了标准的 .NET 系统程序集。我还禁用了生成数据合约(我启用它只是为了尝试)并且能够构建。

    简而言之:确保您要使用的类型只被引用一次。

    【讨论】:

      猜你喜欢
      • 2011-04-07
      • 1970-01-01
      • 2022-11-26
      • 1970-01-01
      • 2018-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多