2013-03-19 51 views
7

当我们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强制更新现有文件?

+0

它应该重新使用默认的文件,不知道是什么导致他们每次创建新文件。你在用什么SVN?也许这些文件被设置为只读,并防止visual studio能够更新文件? – JeremyK 2013-03-19 16:07:05

+1

我猜这是TFS – 2013-03-19 16:11:06

+1

@JeremyK,@Clinton我们使用'IBM Clearcase'进行版本控制。不过,我认为文件的只读属性不应该成为生成新文件的原因......因为解决方案中还有其他只读文件,例如... 1。 Reference.cs 2.Web.Config 3.svcmap文件..启动'服务参考更新'命令提示我,覆盖/检出这些文件.. – Abhijeet 2013-03-20 08:09:20

回答

0

我更喜欢使用SvcUtil工具两个生成的元数据(WSDL + XSD)和生成代理代码

它的好处,没有“幕后法宝”发生的;你看到和控制每一个环节

  • 创建获得WSDL + XSD文件为服务一个cmd文件。每当y时运行cmd我们的服务界面改变了将所得到的wsdl和xsd文件添加到源代码控制中,就像您使用其他任何外部依赖项(例如第三方dll)一样。 Svcutil可以从URL中提取元数据,或者从.net dll中提取它,如果您还有组件实现该服务。

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

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

svcutil.exe的\参考\为MyService \ * WSDL \参考\为MyService \ * XSD /命名空间:*,myNameSpace对象 /out:.\Source\MySubfolders\MySeviceProxy.cs /串行化:DataContractSerializer的 /ct:System.Collections.Generic.List`1

+0

对他的问题并没有真正的帮助。 – JeremyK 2013-03-19 16:06:12

+0

是的,它并没有回答为什么visual studio会这样做的问题,但是提出了一种处理服务元数据的替代解决方案,它可以帮助避免xsd文件名的问题。如果直接使用svcutil,我认为不会发生这种情况。 – Vizu 2013-03-19 17:21:06

+1

它不应该在第一时间发生。我使用这两种方法,他们有他们的权衡,但我从来没有看到他正在经历什么,它可能不是解决方案,但其他方面的阻碍。推动他采取不同的解决方案而不是解决问题是浪费时间。如果他不需要对界面进行自定义更改,则右键单击和更新会更方便,然后每次更新时都必须运行外部工具和复制/粘贴。 – JeremyK 2013-03-20 12:17:09

0

在尝试更新服务引用之前,请检出自动生成的文件,以便VS有权访问这些文件。我相信你的文件被锁定,从而阻止visual studio能够改变它们。这会导致你所看到的。

+0

我检出了整个服务参考文件夹。早些时候我使用文件MyService1.xsd,MyService2.xsd,MyService3.xsd,在更新时我可以看到像MyService31.xsd ... MyService33.xsd这样的文件。 – Abhijeet 2013-03-20 12:35:28