Ошибка BC30002 — Тип XXX не определен
-
01-07-2019 - |
Вопрос
Ладно, это начинает сводить меня с ума.У меня есть веб-приложение asp.net.Довольно просто: большая часть кода находится в .aspx.vb, а несколько классов — в App_Code.
Проблема, которая начала возникать только сегодня (хотя большая часть кода уже написана), заключается в том, что время от времени у меня появляется такое сообщение об ошибке:
Ошибка BC30002:Тип «XXX» не определен
Ошибка возникает каждый раз, когда я изменяю файлы в папке App_Code.РЕДАКТИРОВАТЬ :Хорошо, это также происходит, если я какое-то время ничего не трогаю, а затем обновляю страницу.Я все еще пытаюсь выяснить, как именно вызвать эту ошибку.
Мне просто нужно немного подождать ничего не трогая, затем обновить страницу и все работает, но это очень напрягает.
Итак, я немного поискал, но ничего не нашел, кроме отсутствия импорта.Есть идеи ?
Решение 2
Думаю, я нашел проблему.
Мой код был таким:
Imports CMS
Sub Whatever()
Dim a as new Arbo.MyObject() ' Arbo is a namespace inside CMS
Dim b as new Util.MyOtherObject() ' Util is a namespace inside Util
End Sub
Я не уверен, почему я написал это так, но оказывается, что тот факт, что я вызывал классы, не вызывая ни всего их пространства имен, ни импортируя все их пространство имен, вызывал ошибку.
Я переписал это так:
Imports CMS.Arbo
Imports CMS.Util
Sub Whatever()
Dim a as new MyObject()
Dim b as new MyOtherObject()
End Sub
И теперь это работает...
Другие советы
Похоже на проблему перед компиляцией, особенно потому, что вы упоминаете, что получаете ошибку, а затем ждете, и она исчезает.Возможно, ASP.NET все еще находится в процессе динамической компиляции вашего приложения или скомпилировал типы в разные сборки.
При динамической компиляции не гарантируется, что разные файлы кода программной части будут скомпилированы в одну и ту же сборку.Таким образом, тип, на который вы ссылаетесь, возможно, не удастся разрешить в предварительно скомпилированной сборке.
Попробуйте использовать директиву @Reference, чтобы указать среде выполнения, что ваша страница и файл, содержащий ваш тип, должны быть скомпилированы в одну сборку.
Это случилось со мной после того, как я добавил новый проект к старому решению.Я понизил целевую структуру, чтобы она соответствовала инфраструктуре других «старых» проектов, и ошибка исчезла.
Похоже, это происходит каждый раз, когда веб-сайт запускается (приложение перезапускается каждый раз, когда вы касаетесь app_code, и, вероятно, у вас настроен IIS на закрытие веб-сайта после X минут бездействия).
Могу поспорить, что это как-то связано с тем, что рабочий процесс asp.net не имеет правильных прав доступа на сервере.Итак, он пытается загрузить сборку, но ему отказывают.
Проверьте эту ссылку и в таблице 19.3 приведен список всех папок, к которым учетная запись рабочего процесса должна иметь доступ для функционирования.И не забудьте дать ему права на все файлы и папки в вашем виртуальном каталоге!
Замените файлы vbproj и vbproj.user из резервной копии, если ссылки равны.