Вопрос

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

@ Ссылка — MSDN

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

Похоже, это происходит каждый раз, когда веб-сайт запускается (приложение перезапускается каждый раз, когда вы касаетесь app_code, и, вероятно, у вас настроен IIS на закрытие веб-сайта после X минут бездействия).

Могу поспорить, что это как-то связано с тем, что рабочий процесс asp.net не имеет правильных прав доступа на сервере.Итак, он пытается загрузить сборку, но ему отказывают.

Проверьте эту ссылку и в таблице 19.3 приведен список всех папок, к которым учетная запись рабочего процесса должна иметь доступ для функционирования.И не забудьте дать ему права на все файлы и папки в вашем виртуальном каталоге!

Замените файлы vbproj и vbproj.user из резервной копии, если ссылки равны.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top