【问题标题】:The type X conflicts with imported type XX 类型与导入的 X 类型冲突
【发布时间】:2013-07-04 12:52:45
【问题描述】:

在实体框架(数据库优先)中,我正在尝试向创建的类添加一些数据注释。

一般来说:我创建了 X 类:

namespace Info
{
    using System;
    using System.Collections.Generic;

    public partial class X
    {
        public string SomeProperty {get; set;}
        ...
    }
}

我想在序列化为 JSON 时忽略 SomeProperty 属性,因此在 App_Code/Metadata 创建类 X.cs 并添加一些元数据:

namespace Info
{

    public class XMetaData
    {
        [JsonIgnore]
        public string SomeProperty{get; set;}
    }

     [MetadataType(typeof(XMetaData))]
     public partial class X
     {

     }

}

上面我已经手动将命名空间从 Info.App_Code.Metadata 更改为 Info 以匹配部分类。

但是在我使用 X 类的所有地方我都有警告

The type Info.X in '.../Info/App_Code/Metadata/X.cs ' conflicts with the imported type Info.X in '.../Info/X.cs'. Using the type defined in '.../Info/App_Code/Metadata/X.cs '

我希望这两个部分类会被合并,但是所有出现都指的是那个空的一个 X 类。

有人知道我错过了什么吗?

【问题讨论】:

    标签: c# entity-framework data-annotations partial-classes


    【解决方案1】:

    引用同一类的多个分部类定义必须全部存在于单个程序集中。在上面的示例中,在编译过程中,元数据应该被烘焙到类中,编译后类是完整的,包括所有部分。部分类是一种将同一类的定义拆分为多个文件的方法。

    请参阅here 以获得详尽的解释,但请注意以下几点:

    所有属于同一类型的部分类型定义必须在同一程序集和同一模块(.exe 或 .dll 文件)中定义。部分定义不能跨越多个模块。

    This 链接在这里解释了

    通常,ASP.NET 为每个应用程序目录(例如 App_Code)创建一个程序集,并为主目录创建一个程序集。

    对于您的情况,虽然部分类在同一个项目中并且在同一个命名空间中,但它们并没有被编译到同一个程序集中。

    【讨论】:

    • 但这两个类都在一个项目中,只是在不同的文件夹中。
    【解决方案2】:

    根据您正在开发的应用程序类型,将代码放在 App_Code 文件夹中可能是错误的,因为它对内容有一定的影响。见this other question

    尝试将源文件移出 App_Code 并确保其“构建操作”在属性窗口中为“已编译”。

    【讨论】:

      【解决方案3】:

      删除项目bin文件夹,清理并重建项目

      【讨论】:

        【解决方案4】:

        我有同样的问题。能够通过 2 种方法解决该问题。 1.重命名App_Code文件夹 2.将.cs文件移动到项目的根目录下。

        这两种方法都有效。

        【讨论】:

          【解决方案5】:

          在我的例子中,我通过在 APP_Code 文件夹中创建一个子文件夹来解决这个问题。将源代码移到那里。深度添加了命名空间。清理并构建,现在一切正常。

          【讨论】:

            【解决方案6】:

            尝试检查您的 .aspx 页面是否与 class(.cs) 文件同名。

            例子:如果文件是Guy.aspx,类文件是Guy.cs,会发生冲突。

            检查 .aspx 文件的第一行,如果它 Inherits="Guy" 则存在冲突。如果 Guy.aspx.cs 文件已经创建,请不要忘记更改它,您需要更改公共部分类。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2011-12-25
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-10-19
              • 1970-01-01
              • 2020-02-12
              相关资源
              最近更新 更多