2016-10-20 4 views
0

В последнее время я столкнулся с замедлением на своем веб-сайте и уже нашел причину. Причина в том, что методы на моем уровне DA имеют параметры IEnumerable вместо IQueryable. Я уже реорганизовал параметры в своем DA, и решение было успешно построено. Однако при замене dll DA в prod метод ошибки не найден в слое BL. Метод, который он искал, был предыдущим, у которого есть параметр IEnumerable. Почему я сталкиваюсь с этим, когда я построил код в своем решении в обязательном порядке?Метод не найден в релизе сборки

Примечание: Я не заменяет любые другие библиотеки DLL для DA

+1

Является ли это сильным именем? –

+0

Уху. Что вы подразумеваете под сильным именем? Извините, есть еще много терминов im not familliar с –

ответ

1

Почему я встречая это, когда я построил код в моем решении в обязательном порядке, за исключением?

Потому что вы также перестраиваете свой проект BL, предположительно. Все в порядке - метод все еще существует по имени, а новый тип параметра совместим с аргументом, который вы передаете, поэтому ваш источник все еще компилируется.

Но когда вы пытаетесь заменить только ваш DA сборки, когда ваш BL ассемблерный код выполняется, он все еще ищет метод с параметром IEnumerable, но этот метод не существует больше, следовательно, исключения.

Проще говоря, изменение типа параметра метода не является совместимым в обратном направлении, с точки зрения двоичных совместимости.

Просто перестройте весь проект и замените на все, что зависит от вашей сборки DA, а также от сборки DA. В идеале замените абсолютно все, что вы строите - таким образом вы знаете, что у вас есть последовательный набор ассемблеров.

+0

Ooh wow !! Возможно, это объясняет, почему, когда я делал наоборот (построил мой BL, вернул мой DA), метод все еще не найден, но теперь он ищет IQueryable. Должен проверить это –

+1

@JanLyndonJasa: В принципе, я бы посоветовал вам перераспределить * все * вы перестраиваете, а не одну сборку за раз. Таким образом, вы знаете, что набор сборок согласован. –

+0

Не могу сказать много ответа Джона Скита, однако, я бы хотел добавить, если вы вызовете метод. Время выполнения найдет этот метод на основе подписи, которую вы вызвали. Поскольку параметры являются частью подписи, вы не сможете назвать это, если они меняются. –

Смежные вопросы