Ошибка приведения в ASP.NET

У меня есть класс, объявленный в папке App_Code. Класс содержит общедоступный общий метод, который возвращает тип портфолио.

Когда я пытаюсь вызвать этот метод для инициализации объекта типа Portfolio в одном из элементов управления ASCX, я получаю сообщение «Значение типа Jaguar.Portfolio не может быть преобразовано в Jaguar.Portfolio».

Это проект «Веб-сайт». Я пробовал использовать CType и DirectCast, но все равно получаю ту же ошибку компиляции, когда пытаюсь создать сайт.

Я использую строку кода, указанную ниже, в коде файла элемента управления ascx

Dim pObjSvc As Jaguar.Portfolio = ClassName.GetPortfolio

person Developer    schedule 26.12.2008    source источник


Ответы (4)


У вас есть веб-страница или пользовательский элемент управления, также называемый «Портфолио»? У вас может быть конфликт пространства имен, когда вы не знаете, какой объект Portfolio использовать. В этом случае вам нужно будет изменить имя класса / модуля или код элемента управления или страницы позади класса, и все должно быть настроено.

person JamesEggers    schedule 26.12.2008
comment
Я так не думаю, иначе он не показывал бы мне сообщение об ошибке компиляции, которое отображало бы один и тот же тип с обеих сторон назначения. - person Developer; 26.12.2008
comment
Он может не показывать вам ошибки компиляции, когда вы ожидаете. Подскажет быстрый поиск файлов. - person StingyJack; 26.12.2008
comment
Помните, что в VB.Net у вас есть пространство имен по умолчанию для вашего проекта. Иногда это приводит к коллизии, которую вы не можете просто обнаружить, если у вас есть класс с тем же именем, что и пространство имен по умолчанию. - person Joel Coehoorn; 26.12.2008
comment
Я дважды проверил - нет конфликтов имен классов - person Developer; 26.12.2008

Кажется, есть кто-то еще с такой же проблемой:

Net - value типа MyNamespace.MyClassName нельзя преобразовать в MyNamespace.MyClassName

У меня есть приложение ASP.Net, которое использует сборки из нескольких других решений. При тестировании приложений на своей машине я собираю все упомянутые сборки с помощью nmake. Последние сборки помещаются в общий каталог, на который ссылается мое приложение ASP.NET.

Иногда я получаю следующую ошибку: значение типа «MyNamespace.MyClassName» не может быть преобразовано в «MyNamespace.MyClassName» (их много для разных классов) при выполнении отладочной сборки. Я безуспешно пробовал следующее:

Создайте приложение ASP.Net. Перестройте приложение ASP.Net. Закройте VS и создайте приложение ASP.Net. Закройте VS.Net, перестройте приложение asp.Net. IISreset и создайте / перестройте приложение.

Кажется, единственное, что работает, - это если я запускаю nmake для сборки всех моих ссылочных сборок, я могу затем построить приложение ASP.Net.

Есть идеи относительно того, что вызывает это? Есть более простой способ исправить это?

К сожалению, однозначного ответа автор вопроса не нашел. Но, возможно, в нем есть подсказка, которая поможет найти решение.

ОБНОВЛЕНИЕ: я не уверен, возможно ли это вообще на веб-сайте ASP.NET, но, может быть, вы случайно добавили ссылку на (временную) сборку самого проекта? Это объяснило бы ошибку. Попробуйте также удалить содержимое папки bin и obj.

person splattne    schedule 26.12.2008

Просто совет по отладке:

Попробуйте переименовать класс Portfolio и перекомпилировать. Может быть, где-то есть старая сборка или какой-то другой код в .vb ваших файлах, который содержит класс с таким же именем?

person splattne    schedule 26.12.2008
comment
Таким образом, вы получаете значение типа Jaguar.PortfolioRenamed не может быть преобразовано в Jaguar.PortfolioRenamed - person splattne; 26.12.2008
comment
Мне удалось связаться с автором веб-службы, и, похоже, служба была обновлена, но обновленная служба не была создана и протестирована. - person Developer; 26.12.2008
comment
Ах, это все объясняет. Я рад, что вы нашли причину проблемы. Может быть, вы тоже сможете обновить свой ответ, если в будущем у кого-то еще возникнет такая проблема ... - person splattne; 26.12.2008

Я встречал подобные ситуации, когда страница aspx создавалась с тем же именем, что и класс бизнес-объекта. У вас есть какая-нибудь aspx-страница с классом портфолио с выделенным кодом?

person patridge    schedule 27.12.2008