类似于: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 :(得分: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。
答案 1 :(得分:0)
感谢Seph,我提出了一些改进的方法来添加实际的引用,而不是简单的.cs文件:
http://localhost/myWcfDataService.svc/$metadata
保存为文件,例如。 myService.csdl
names cannot be the same as their enclosing type
。当类具有相同名称的字段时会导致它。我决定重命名课程,例如。从foo
到foo_
。您可以改为重命名字段。定期运行c:\Windows\Microsoft.NET\Framework\v4.0.30319\DataSvcUtil.exe /language:CSharp /in:myService.csdl /out:serviceReference1.cs
以查看何时消除所有错误。myService.csdl
重命名为$metadata
$metadata
文件相同的文件夹中运行某个Web服务器。例如,我安装了python 3,只是从python -m http.server
所在的文件夹中运行$metadata
。http://localhost:8000
。 Visual Studio将请求/$metadata
并生成所有内容。