Импортированный тип определяется несколько раз - только в xbuild на Mono 2.10.1

Возникла проблема, когда компиляция некоторого кода, использующего 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 по умолчанию не приводит к этой ошибке.


person Michael Shimmins    schedule 21.03.2011    source источник
comment
Можете ли вы включить подробный вывод xcode и вставить его куда-нибудь?   -  person Mikayla Hutchinson    schedule 25.03.2011
comment
Будет делать - какой уровень детализации вам нужен?   -  person Michael Shimmins    schedule 26.03.2011
comment
Достаточно, чтобы содержать полные аргументы командной строки для компилятора C#.   -  person Mikayla Hutchinson    schedule 27.03.2011
comment
@mhutch — вот оно: lexim.com.au/downloads/shimms/build .txt   -  person Michael Shimmins    schedule 27.03.2011
comment
Не связанный с этой проблемой, вчера я переустановил OS X на новый диск. После установки 2.10.1 и сборки головы MD та же сборка проверки кода выполняется без проблем. Мне интересно, было ли это как-то связано с несколькими различными версиями Mono, устанавливаемыми/удаляемыми/обновляемыми/понижаемыми с течением времени.   -  person Michael Shimmins    schedule 28.03.2011
comment
Моя беда - тупо забыл переключиться обратно на xbuild при новой установке. При переключении обратно на xbuild возникает та же ошибка.   -  person Michael Shimmins    schedule 28.03.2011


Ответы (2)


Тип System.Web.HttpContextBase был определен в System.Web.Abstractions.dll в .NET 3.5 SP1, но в System.Web.dll в .NET 4.0. Это означает, что скомпилированные dll со ссылками на тип в System.Web.Abstractions.dll будут «перенаправлены по типу» в System.Web.dll.

Кажется, у вас есть локальная копия System.Web.Abstractions.dll в /Users/shimms/Development/convergence/lib/System.Web.Abstractions.dll, вероятно, версия .NET 3.5, которая будет конфликтовать с системой 4.0. Web.dll.

person Mikayla Hutchinson    schedule 28.03.2011
comment
Спасибо - иногда самые очевидные вещи оказываются самыми неуловимыми. - person Michael Shimmins; 29.03.2011

Эта проблема возникает, когда вы ссылаетесь на тип, который определен в нескольких классах. Чтобы исправить это, вы можете отредактировать свою ссылку и снять отметку с одной из dll, которая вызывает проблему.

При наведении указателя мыши на ошибку в Visual Studio/Xamarin отображается имя нескольких ссылок, в которых существует этот тип. Просто проверьте и включите только одну ссылку или класс.

Ниже приведены скриншоты для справки.

введите здесь описание изображения

После устранения проблемы:

введите здесь описание изображения

person Arun Gupta    schedule 27.01.2017