解决与程序集引用相关的错误和警告

  • CS0012:类型“type”定义在一个未被引用的程序集内。必须添加对程序集“assembly”的引用。
  • CS0234:命名空间中不存在该类型或命名空间名称,是否缺少程序集引用?
  • CS0246:未能找到类型或命名空间名称(是否缺少 using 指令或程序集引用?)
  • CS0400: 无法在全局命名空间中找到类型或命名空间名称(缺少程序集引用吗?)
  • CS1068: 无法在全局命名空间中找到类型名称。此类型已转发到另一个程序集。请考虑添加对该程序集的引用。
  • CS1069: 无法在命名空间中找到类型名称。此类型已转发到另一个程序集。请考虑添加对该程序集的引用。
  • CS1070: 找不到类型名称。此类型已转发到另一个程序集。请考虑添加对该程序集的引用。
  • CS1704: 已导入具有相同简单名称的程序集。尝试删除其中一个引用或对其进行签名以并行启用。
  • CS1714: 无法解析或无效此类型的基类或接口。
  • CS1760: 多个程序集引用相同的元数据,但只有一个是链接引用(使用 /link 选项指定);请考虑删除其中一个引用。
  • CS7008: 程序集名称保留,不能在交互式会话中用作引用。
  • CS7068:对类型的引用声明在此程序集中定义了该类型,但源代码或任何添加的模块中并未定义该类型。
  • CS7069:引用声称某类型是在另一个程序集定义的,但无法找到该程序集。
  • CS7071: 程序集引用无效,无法解析。
  • CS7079: 类型在尚未添加的模块中定义。必须添加模块。
  • CS8090: 引用的程序集中存在错误。
  • CS8203: 程序集名称无效。
  • CS8206:程序集“assembly name”中的模块“module name”正在将类型“type name”转发到多个程序集:“first assembly name”和“second assembly name”。
  • CS8356: 预定义类型“type name”在多个被引用的程序集中声明:“first assembly name”和“second assembly name”
  • CS9286:类型不包含定义,且未找到接收器类型的可访问扩展成员(是否缺少 using 指令或程序集引用?)

此外,本文还介绍了以下警告:

  • CS1683:引用类型“类型名称”声称已在此程序集中定义,但该类型在源代码或任何添加的模块中均未定义。

缺少引用

以下错误和警告表明您缺少程序集引用:

  • CS0012:在未被引用的程序集中定义了类型“type”。必须添加对程序集“assembly”的引用。
  • CS0234: 命名空间中不存在类型或命名空间名称(是否缺少程序集引用?)
  • CS0246:未能找到类型或命名空间名称(是否缺少 using 指令或程序集引用?)
  • CS1714: 无法解析或无效此类型的基类或接口。
  • CS9286:类型不包含定义,且未找到接收器类型的可访问扩展成员(是否缺少 using 指令或程序集引用?)

这些编译器错误指示代码中存在以下问题之一:

当程序集看起来已被引用时

如果你的项目中似乎已引用了该程序集,但仍收到 CS0012,请尝试以下故障排除步骤:

  • 还原包:运行 dotnet restore 以确保正确解析所有包引用,尤其是在安装或卸载 NuGet 包之后。

  • 清除 NuGet 包缓存并还原:

    dotnet nuget locals all --clear
    dotnet restore
    
  • 检查版本冲突:验证所有引用的程序集是否都使用兼容版本。 在生成输出中查找绑定重定向警告。

  • 清理解决方案并重新生成,以确保不会保留过时的引用:

    dotnet clean
    dotnet build
    
  • 验证包完整性:如果该错误是在包操作之后出现的,请通过移除并重新安装该包来确保它已正确安装:

    dotnet remove package [PackageName]
    dotnet add package [PackageName]
    

类型转发

  • CS1068: 无法在全局命名空间中找到类型名称。此类型已转发到另一个程序集。请考虑添加对该程序集的引用。
  • CS1069: 无法在命名空间中找到类型名称。此类型已转发到另一个程序集。请考虑添加对该程序集的引用。
  • CS1070: 找不到类型名称。此类型已转发到另一个程序集。请考虑添加对该程序集的引用。
  • CS8206:程序集“assembly name”中的模块“module name”正在将类型“type name”转发到多个程序集:“first assembly name”和“second assembly name”。

CS1068、CS1069 和 CS1070 表示引用已转发到其他程序集的类型时发生的错误。 添加对错误消息中指示的程序集的引用。

CS8206 表示在引用的程序集或模块中存在冲突的类型转发器元数据。 同一类型被转发到一个以上的目标程序集。 使用已修正或重建的依赖项,将该类型转发到单一目标。 确保包和程序集版本一致,或删除引入冲突元数据的引用。 对本地类型声明的源别名或不相关的更改不会更正引用的元数据。

重复引用

以下错误表示程序集引用重复:

  • CS1704: 已导入具有相同简单名称的程序集。尝试删除其中一个引用或对其进行签名以并行启用。
  • CS1760: 多个程序集引用相同的元数据,但只有一个是链接引用(使用 /link 选项指定);请考虑删除其中一个引用。
  • CS8356:预定义类型“type name”已在多个被引用的程序集中声明:“first assembly name”和“second assembly name”

若要修复这些错误,请删除其中一个引用或解决重复。 重复的原因包括:

  • 具有相同名称的多个未签名程序集。
  • 项目引用同一程序集的多个版本。

对于 CS8356,请删除或替换定义相同预定义运行时类型的重复或不兼容引用。 确保项目面向一个一致的框架和引用程序集集。 不要添加预定义类型的另一个源定义。

程序集引用无效

以下错误指示程序集引用无效:

  • CS7008: 程序集名称保留,不能在交互式会话中用作引用。
  • CS7068:对某类型的引用声称该类型是在此程序集中定义的,但该类型并未在源代码或任何添加的模块中定义。
  • CS7069:对类型的引用声明在另一个程序集中定义了该类型,但找不到它。
  • CS7071: 程序集引用无效,无法解析。
  • CS7079: 类型在尚未添加的模块中定义。必须添加模块。
  • CS8090: 引用的程序集中存在错误。
  • CS8203: 程序集名称无效。

以下警告还指示无效的引用程序集:

  • CS1683:引用类型‘类型名称’声称在此程序集内定义,但在源代码或任何添加的模块中未定义

检查是否正确拼写了程序集名称。 引用的程序集文件可能无效。