【发布时间】: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