导入的类型定义了多次 - 仅在Mono 2.10.1上的xbuild下

时间:2011-03-21 07:43:17

标签: c# msbuild mono monodevelop xbuild

编译使用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 trunk构建集来使用xbuild进行编译。

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

2 个答案:

答案 0 :(得分:6)

类型System.Web.HttpContextBase在.NET 3.5 SP1中的System.Web.Abstractions.dll中定义,但在.NET 4.0中的System.Web.dll中定义。这意味着编译的dll引用System.Web.Abstractions.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。

答案 1 :(得分:1)

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

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

以下是供您参考的屏幕截图。

enter image description here

解决问题后:

enter image description here