2010-02-22 56 views
4

我有一個很大的問題,在VS2010 RC中獲取服務引用以使用現有程序集。爲什麼添加服務引用時VS2010 RC不會使用我現有的類型?

儘管我有一個包含所有服務項目和消費項目(這是一個類庫)之間共享的所有數據契約(標有DataContract和具有DataMember的屬性的類)的類庫,但是當我添加一個服務引用時,數據合約將通過服務引用而不是使用現有類型來重新生成。

當我使用VS2010 beta 2時,這工作得很好,並且我有使用相同數據合同的現有服務引用。但是如果我添加一個新的服務引用,或者甚至更新一箇舊的服務引用,它將不再使用現有的類型。

我做了一個迷你測試解決方案,一個服務,一個數據合同類型和一個控制檯應用程序作爲消費者(都在同一個解決方案中),並且它似乎可以工作,但這對於我。有什麼方法可以瞭解爲什麼它不能使用現有的類型?

編輯以清除。 它可以生成與svcutil.exe的代理類,並指向數據契約的dll,像這樣:

svcutil.exe http://localhost/MyService.svc 
/reference:[Path To DataContracts]\DataContracts.dll 
/n:*,MyProject.MyServiceReference /ct:System.Collections.Generic.List`1 

的問題是,莫不是有什麼可能的原因Visual Studio來生成自己的datacontracts即使選中「重用」複選框並引用datacontracts程序集,也不要使用現有的程序。

+0

我可能會補充一點,我可以使用現有的類型,通過手動生成帶有svcutil.exe的服務引用並指向/ reference參數中的數據契約dll。但我仍然不明白爲什麼它不能在Visual Studio中工作! – 2010-02-22 16:53:21

+0

如果它在你的簡單情況下工作,那麼保持它複雜化直到它失敗,或者直到它符合你的實際應用。 – 2010-02-22 19:50:16

+0

我想到了這一點,但我的實際應用程序由14個項目,數百個類和幾十個服務引用組成,約有30個數據合同類。因此,「直到它符合你的實際應用」將需要一段時間。我希望別人有這個問題,或者至少知道爲什麼重用類型會失敗的原因。 – 2010-02-22 20:06:46

回答

0

當您添加服務引用時,會出現一個複選框,指示您是要生成數據合同還是使用現有類型。

我還沒有檢查,但默認情況下可能已經改變,這將解釋您的問題。

+1

我相信這是關於高級標籤。 – 2010-02-22 19:39:16

+0

不,這是檢查。相反,複選框是我想要從所有引用的程序集中重用類型,還是僅重新選擇我所選擇的程序集。無論哪種方式,它都不起作用。 – 2010-02-22 19:39:41

1

我曾經在VS 2008中遇到過這個問題。雖然我無法找到它從同一個程序集中挑選類型的原因,但是您添加了服務引用,但我注意到,如果您真的將DataContracts取出,它就會起作用。就像把它們放在一個單獨的dll中,然後將該dll引用到要添加服務引用的項目中。在大多數情況下,這是一個更優雅的解決方案,因爲人們傾向於在服務和服務使用者之間共享DataContracts。

相關問題