【问题标题】:Bypassing member names cannot be the same as their enclosing type绕过成员名称不能与其封闭类型相同
【发布时间】:2012-05-29 15:20:44
【问题描述】:

类似于: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 进行服务引用,但均未成功,理想情况下,这将是一个适用于两者的解决方案,但此时我愿意接受仅适用于其中一个的解决方案.

【问题讨论】:

  • 微软解决方案中居然有一个名为 foo 的成员字段?大声笑:-)
  • @TomerW 不,我们的 CRM 解决方案是定制的,包括一些额外的类,foo 表示具有 foo 字段的类。根据tools.ietf.org/html/rfc3092 foo 被用作元句法变量,没有任何适当的解释或定义,通常是当变量的实际含义对上下文范围没有意义时。
  • 是的,我知道 foo bar,我认为你没有更改异常消息 :)
  • @TomerW 这似乎是一个奇怪的假设,实际的错误消息包含客户公司的名称作为字段的一部分,因此我删除了此内容并替换为foo

标签: .net visual-studio-2010 dynamics-crm-2011 odata


【解决方案1】:

感谢 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,然后简单地从 $metadata 所在的文件夹中运行 python -m http.server
  • 照常在 Visual Studio 中添加服务引用,但使用您的临时 Web 服务器地址。就我而言,它是http://localhost:8000。 Visual Studio 将请求/$metadata 并生成所有内容。

【讨论】:

    【解决方案2】:

    我已经想出了如何解决这个问题。

    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找到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-21
      • 2020-08-24
      • 1970-01-01
      • 1970-01-01
      • 2014-03-05
      • 2020-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多