代码之家  ›  专栏  ›  技术社区  ›  Madeleine

RIA服务中的Silverlight共享类导致生成错误-类型“x”已包含“y”的定义

  •  2
  • Madeleine  · 技术社区  · 14 年前

    我有一个Silverlight4应用程序,我在其中使用共享类。在.web项目中,我有一个名为“x.shared.cs”的类。此类有三个字符串属性。当我构建应用程序时,它会给出一个错误消息:“类型‘X’已经包含‘Y’的定义”。似乎Silverlight应用程序中生成的代码中的属性被视为重复的。我尝试过清理我的解决方案和重建,这有时会有所帮助,但完全不一致。

    共享类(x.shared.cs)的代码如下:

    public partial class VideoItem
    {
        [Key]
        public String ID
        {
            get;
            set;
        }
    
        public String ImageURL
        {
            get;
            set;
        }
    
        public String URL
        {
            get;
            set;
        }
    }
    

    下面是解决方案资源管理器的屏幕截图,显示生成的共享文件: alt text

    4 回复  |  直到 13 年前
        1
  •  3
  •   Madeleine    14 年前

    为了解决这个问题,我创建了一个不包含任何属性的空白.shared.cs类(这显然是一个部分类)。然后,我在同一个名称空间中创建了另一个具有该类名的分部类,并在这里放置了我需要访问的所有属性。

        2
  •  2
  •   JosephC    14 年前

    代码生成有一个限制。为了避免在共享或链接文件中生成重复的成员,成员不能使用自动实现的属性。所以要解决这个问题,你只需要定义自己的get和set。请记住,应该有一个很好的理由不让RIA代码生成创建成员。要让RIA创建成员,只需不与客户机链接或共享实体,而是通过查询方法将其公开。

    http://msdn.microsoft.com/en-us/library/ee707359%28VS.91%29.aspx

    避免重复成员

    生成实体代理类时,可能已使用分部类型在客户端项目中定义了相同的类型和成员。您可能已在共享代码或仅存在于客户端项目中的代码中定义了成员。RIA服务在生成代理类之前检查现有成员。已定义的任何成员都不会在代理类中生成。[不包括-实体成员不能使用自动实现的属性。从服务器到客户端项目的共享和链接文件是避免生成成员的唯一方法。]

        3
  •  0
  •   Rus    14 年前

    您检查过x.shared.cs中的类定义是部分的吗?

    public partial class MyEntity
    {
      ...
    }
    
        4
  •  0
  •   iCollect.it Ltd    14 年前

    是否手动添加了对 X 在Silverlight应用程序中共享.cs文件?

    复制由RIA服务连接的Web/客户端项目自动完成。这些文件最后放在 隐藏的 已在客户端应用程序下生成\u code文件夹。

    打开隐藏文件,查看是否在Silverlight应用程序中包含两次相同的文件。