Ответ 1
Если у вас есть папка под названием "App_Code", вы можете пройти через головные боли и мигранты. Или просто замените "App_Code" на случайное имя, например "код" или "данные" и поместите свои классы туда, чтобы исправить это. В моем case, мой GUID проекта был веб-приложением и типом С#.
Лучший ответ:
Примечание:
Я запускаю сайт с помощью IIS со статическим портом, не используя Visual Studio 2012 с динамическим портом. У меня определенная конфигурация сервера на веб-сервере, поэтому я хочу, чтобы сайт вел себя так же, как работает наш выпущенный сайт. Поэтому, почему я запускаю это так.
Отвечайте на мой вопрос:
Это произошло потому, что у нас были дублированные версии классов App_Data в папке bin. "Компилировать" версию *.cs и версию веб-сайта *.cs. Ошибка isProvider возникает, когда существует более одного класса с тем же именем. Когда мы развертываем приложение ASP.NET, мы развертываем ТОЛЬКО скомпилированную версию файлов *.cs. В среде разработки мы сохраняем для них значение "Свойства" > "Создать действие" > "Нет".
Не уверен в этом. Возможно, это связано с тем, что вы делаете во временной и/или obj-папке, но точно не уверены. Подумайте о том, почему. В то же время, вот список вещей для решения проблемы. Не уверен, нужны ли некоторые или все из них, но теперь он работает.
Шаги для исправления:
- измените все файлы App_Data *.cs на Properties > Build Action > Compile
- Исправить исключения, которые они выбрали, чтобы снова запустить эту сборку - Clean Solution > Build Solution... одно исключение не было обнаружено с помощью тех, которые были установлены в свойствах > Build Action > None, поэтому почему это было необходимо. По сути, Visual Studio 2012 не генерирует исключение и говорит "Build Successful".
- затем измените файлы App_Data *.cs обратно в Properties > Build Action > None
- удалить dll из \obj\Debug
- удалить dll из \bin
- удалить временные файлы ASP.NET -
C:\WINDOWS\Microsoft.NET\Framework\{.NET version}\Temporary ASP.NET Files\
- Решение для сборки
- перезапустить веб-сайт IIS
Теперь все отлично работает!
EDIT:
Фактическая проблема заключалась в том, что я ссылался на внешний проект в Visual Studio, но для него не было dll файла, потому что тип проекта был консольным приложением, а не библиотекой классов. Реальная проблема заключалась в том, что Visual Studio говорит, что она компилирует код в порядке (в App_Code), когда у вас есть инструкция using к этому другому проекту, но говорит, что успешно построена, даже если для всех *.cs файлов установлена опция Build Action > Compile App_Code. Когда вы запустите веб-приложение, оно должно быть возвращено в действие "Действие" > "Нет" для его работы. Однако, поскольку файлы *.cs в App_Code фактически не компилируются с новым кодом (если это так, как ASP.NET в IIS обрабатывает эти файлы App_Code *.cs), он выдает ошибку 500 Internal Server, потому что нет хорошего кода CIL во время выполнения. Чтобы решить эту проблему, я просто изменил тип проекта на библиотеку классов, и он по-прежнему не имеет ошибок, но теперь он может ссылаться на dll на другой проект.
Ошибка isProvider всегда возникает при обнаружении дублированных классов. Поэтому я не уверен, почему это происходит, но это по существу уходит, как только вы исправляете часть выше.