8

当我们Add Service Reference,Visual Studio 创建 xsd 文件如下:

  1. MyService1.xsd
  2. MyService2.xsd
  3. MyService3.xsd

连同 wsdl 和 .svcmap 文件。

在后续更新中,使用Update Service Refernce不是更新上述文件 VS 2010 继续添加更多和更多附加其名称的文件..

  1. MyService31.xsd
  2. MyService32.xsd
  3. MyService33.xsd ....

这会在持续集成环境中签入文件和计划构建失败时产生麻烦。:-( 在编码方面没有任何错误。

你如何处理这种情况?我们可以强制Visual Studio强制更新现有文件吗?

4

2 回答 2

0

在尝试更新服务参考之前,请检查自动生成的文件,以便 VS 可以访问这些文件。我相信您的文件已被锁定,导致 Visual Studio 无法更改它们。这将导致您所看到的。

于 2013-03-20T12:19:06.647 回答
0

我更喜欢使用 svcutil 来生成元数据(wsdl+xsd)和生成代理代码。

关于它的好处是没有“幕后魔术”发生;您可以看到并控制各个方面。

  • 创建一个用于获取服务的 WSDL+XSD 的 cmd 文件。每当您的服务接口更改时运行 cmd。将生成的 wsdl 和 xsd 文件添加到源代码管理中,就像处理任何其他外部依赖项(例如,第 3 方 dll)一样。Svcutil 可以从 url 中提取元数据,或者如果您还拥有实现该服务的程序集,则可以从 .net dll 中提取元数据。

  • 创建一个用于(重新)生成代理代码的 cmd 文件。每当服务元数据更改时运行它。将生成的 .cs 文件添加到您的项目中。

cmd 文件看起来像这样。您可以定义命名空间映射、序列化程序、集合使用等。查看 svcutil 的帮助。

svcutil.exe .\References\MyService\*.wsdl .\References\MyService\*.xsd /namespace:*,MyNamespace /out:.\Source\MySubfolders\MySeviceProxy.cs /serializer:DataContractSerializer /ct:System.Collections。通用列表`1

于 2013-03-19T15:52:27.703 回答