Анонимный тип Имя Столкновение
Запрос linq, возвращающий анонимный тип, выдает следующую ошибку при выполнении.
The type '<>f__AnonymousType9<Name,Value>' exists in both
'Customer.CustomerWeb.Presentation.dll' and 'Customer.CustomerContext.dll'
Используя JetBrains dotPeek
, я смог найти, что есть два сгенерированных компилятором классов, которые сталкиваются.
Customer.CustomerContext.dll
internal sealed class <>f__AnonymousType9<<PayrollSiteID>j__TPar, <IsActive>j__TPar>
Customer.CustomerWeb.Presentation.dll
internal sealed class <>f__AnonymousType9<<Name>j__TPar, <Value>j__TPar>
Оба сгенерированных класса находятся в корне namespace
. Есть ли способ, которым я могу направить Anonymous Type classes
в конкретное пространство имен на каждой сборке? Легкое исправление заключается в добавлении третьей переменной в один из анонимных запросов, однако это скорее хак.
Ответы
Ответ 1
Я думаю, вам нужно что-то вроде следующего, где вы добавляете свой оператор using в пространство имен, чтобы придать ему предпочтение в разрешении имен:
using Customer.CustomerContext;
namespace yourNameSpace
{
using Customer.CustomerWeb.Presentation; //Where f__AnonymousType9<Name,Value> exists
}
Ответ 2
Из комментариев
В результате получается StackOverFlow. Чтобы получить The type
'<>f__AnonymousType9<Name,Value>' exists in both
'Customer.CustomerWeb.Presentation.dll' and
'Customer.CustomerContext.dll'
, мне нужно сбросить точку останова до авария. Проверка переменной - это когда я получаю это сообщение
Столкновение пространства имен не является вашей проблемой, что приводит к тому, что отладчик взорвется, когда пытается оценить переменную, но я не вижу, как это может вызвать StackOverflow. Вам нужно либо a) более внимательно изучить linq, чтобы выяснить, где у вас есть случайная рекурсия, или b) разместить часть трассировки стека, чтобы мы могли помочь вам отследить ее.