2013-03-19 56 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