2012-05-23 85 views
4

類似於:member names cannot be the same as their enclosing type除了我無法更改元數據,我想完全忽略該類。繞過會員名稱不能與其封閉類型相同

我想在Visual Studio 2010中添加一個服務引用,但出現以下錯誤。

自定義工具'DataServiceClientGenerator'失敗。數據服務 客戶端代碼生成失敗:指定的模式無效。錯誤: (0,0):錯誤0042:名稱foo不能用於類型 Microsoft.Crm.Sdk.Data.Services.foo。會員名稱不能相同 他們的封閉類型..

我明白,這個錯誤是因爲一個叫場foo在對象foo,但我不能改變的..

所以不能夠在CRM中做出任何更改,我如何生成我的服務參考?

我想過下載$metadata,然後刪除違規類型然後保存它(因爲類型不是我將要使用的類型)。但是我不知道如何讓它起作用,因爲它不是非常簡單。

我試過用C#和VB.NET做服務引用,都沒有工作,理想情況下它會是一個解決方案,適用於這兩個,但在這一點上,我會打開一個解決方案,只適用於這些。

+0

在Microsoft解決方案中實際上有一個名爲foo的成員字段? LOLs :-) –

+0

@TomerW不,我們的CRM解決方案是定製的,並且包含一些額外的類,'foo'代表具有'foo'字段的類。根據http://tools.ietf.org/html/rfc3092,「foo」被用作沒有任何正確解釋或定義的元變量變量,通常當變量的實際含義對上下文的範圍沒有意義時。 – Seph

+0

雅,我知道富吧, 我沒想到你改變異常消息:) –

回答

6

我已經研究出如何解決這個問題。

http://localhost/myWcfDataService.svc/$metadata 

保存這個結果到磁盤如c:\metadata.csdl

然後手動編輯的文件,並刪除(或重命名)問題的字段(這將導致它不是在你的服務使用,但它是更好比整個服務不工作)。

然後運行以下命令:

c:\Windows\Microsoft.NET\Framework\v4.0.30319\DataSvcUtil.exe /language:CSharp /in:c:\metadata.csdl /out:c:\serviceReference1.cs 

現在,新生成的serviceReference1.cs文件添加到您的Visual Studio項目,尋找那些從System.Data.Services.Client.DataServiceContext繼承這是您的服務入口點的類。

可以找到更多的信息here

0

感謝SEPH,我想出了有所改善的方式來增加實際的參考,而不是簡單的cs文件:

  • 保存http://localhost/myWcfDataService.svc/$metadata的文件,如。 myService.csdl
  • 將其編輯爲手動解決names cannot be the same as their enclosing type。這是由於一個班級有一個同名的字段造成的。我決定重新命名課程,例如。從foofoo_。您可以改爲重命名字段。定期運行c:\Windows\Microsoft.NET\Framework\v4.0.30319\DataSvcUtil.exe /language:CSharp /in:myService.csdl /out:serviceReference1.cs以查看何時清除了所有錯誤。
  • 重命名myService.csdl$metadata
  • 暫時運行在同一個文件夾中的一些Web服務器爲$metadata文件。例如,我安裝了python 3,並簡單地從$metadata所在的文件夾運行python -m http.server
  • 像往常一樣在Visual Studio中添加服務引用,但使用您的臨時Web服務器地址。在我的情況下,它是http://localhost:8000。 Visual Studio將請求/$metadata並生成所有內容。
相關問題