【问题标题】:The imported type is defined multiple times - only under xbuild on Mono 2.10.1导入的类型被多次定义 - 仅在 Mono 2.10.1 上的 xbuild 下
【发布时间】:2011-03-21 07:43:17
【问题描述】:

编译一些使用HttpContextBase 的代码时出现编译错误:

UserService.cs(13,26): error CS0433: The imported type `System.Web.HttpContextBase' is defined multiple times

违规行是:

private readonly HttpContextBase httpContext;

如果我去掉那行代码,或者注释它,错误就会消失,程序集就会编译。

在另一个项目(此项目的测试项目)中,尝试声明 HttpContextBase 以传递给此对象的构造函数时会发生相同的错误。所以这似乎是一个跨项目的问题。

这是项目文件问题吗? (在其中找不到对System.Web 的多个引用)。在我对AfterBuild 步骤进行一些更改之前它正在编译,所以我担心我在 csproj 文件中搞砸了。

这是使用 Mono 2.10.1 构建的,使用 monodevelop 主干构建集使用 xbuild 进行编译。

使用默认的 Monodevelop 构建行为进行编译不会产生此错误。

【问题讨论】:

  • 您可以启用详细的 xcode 输出并将其粘贴到某处吗?
  • 会做 - 你追求什么级别的冗长?
  • 足以包含 C# 编译器的完整命令行参数。
  • 与此问题无关,我昨天在新驱动器上重新安装了 OS X。安装 2.10.1 和 MD 头构建后,相同的代码签出构建没有问题。我想知道这是否与随着时间的推移安装/卸载/升级/降级的几个不同版本的 Mono 有关。

标签: c# msbuild mono monodevelop xbuild


【解决方案1】:

System.Web.HttpContextBase 类型在 .NET 3.5 SP1 的 System.Web.Abstractions.dll 中定义,但在 .NET 4.0 的 System.Web.dll 中定义。这意味着引用 System.Web.Abstractions.dll 中类型的已编译 dll 将被“类型转发”到 System.Web.dll。

您似乎在 /Users/shimms/Development/convergence/lib/System.Web.Abstractions.dll 中有一个 System.Web.Abstractions.dll 的本地副本,可能是 .NET 3.5 版本,它会与4.0 System.Web.dll。

【讨论】:

  • 谢谢 - 有时最明显的事情是最难以捉摸的。
【解决方案2】:

当您引用在多个类中定义的类型时会发生此问题。要解决此问题,您可以编辑参考并取消选中导致问题的 dll 之一。

当您将鼠标悬停在 Visual Studio/Xamarin 中的错误上时,它将显示存在此类型的多个引用名称。只需检查并仅包含一个参考或类。

以下是截图供您参考。

解决问题后:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 2020-11-25
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 2019-04-30
    相关资源
    最近更新 更多