4

类似于:成员名称不能与其封闭类型相同,除非我无法更改元数据,我只想完全忽略该类。

我正在尝试在 Visual Studio 2010 中添加服务引用,但出现以下错误。

自定义工具“DataServiceClientGenerator”失败。数据服务客户端代码生成失败:指定的架构无效。错误:(0,0):错误 0042:名称 foo 不能用于 Microsoft.Crm.Sdk.Data.Services.foo 类型。成员名称不能与其封闭类型相同。

我知道这个错误是因为有人foo在对象中命名了一个字段,foo但我无法更改它..

因此,如果无法在 CRM 中进行任何更改,我如何生成我的服务参考?

我曾考虑下载$metadata然后删除有问题的类型,然后保存它(因为该类型不是我无论如何都会使用的类型)。但我不知道如何让它发挥作用,因为它不是太直截了当。

我曾尝试使用 C# 和 VB.NET 进行服务引用,但均未奏效,理想情况下,这将是适用于两者的解决方案,但此时我愿意接受仅适用于其中一个的解决方案。

4

2 回答 2

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是您的服务入口点。

更多信息可以在这里找到。

于 2012-05-23T12:42:02.220 回答
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
  • 临时在文件所在的文件夹中运行一些网络服务器$metadata。例如,我安装了 python 3 并且只是python -m http.server从所在的文件夹中运行$metadata
  • 像往常一样在 Visual Studio 中添加服务引用,但使用您的临时 Web 服务器地址。就我而言,它是http://localhost:8000。Visual Studio 将请求/$metadata并生成所有内容。
于 2017-12-07T09:11:16.127 回答