«Сообщение об ошибке Parser: не удалось загрузить тип» в Global.asax


203

Я работаю над проектом MVC3 и получаю следующую ошибку:

Сообщение об ошибке синтаксического анализатора: не удалось загрузить тип «GodsCreationTaxidermy.MvcApplication».

Ошибка источника:

Линия 1: <%@ Application Codebehind="Global.asax.cs" Inherits="GodsCreationTaxidermy.Core.MvcApplication" Language="C#" %>

Ошибка, которую я получаю, не может загрузить GodsCreationTaxidermy.Core.MvcApplication, но на этом снимке экрана основная часть не отображается в ошибке:

Скриншот страницы ошибки

У кого-нибудь есть идеи или решение этой ошибки?


8
У вас действительно есть класс GodsCreationTaxidermy.Core.MvcApplication в вашем приложении? Если нет, пожалуйста, создайте то же самое и скомпилируйте проект. Это будет работать наверняка.
Шайлеш

4
Да, у меня есть GodsCreationTaxidermy.Core.MvcApplication (Global.asax.cs)
PsychoCoder

Файл Global.asax, который, кажется, используется (в соответствии со снимком экрана), выглядит иначе, чем тот, который вы показали.
Дарин Димитров

проверьте, совпадает ли строка Inherits с путем к классу в вашем приложении (namespace + pathname), то есть они оба являются GodsCreationTaxidermy.Core.MvcApplication
linkerro

Это одна из проблем, Дарин, независимо от того, что я делаю, это всегда оставляет основной компонент
PsychoCoder

Ответы:


175

Ваш локальный веб-сервер выполняет код, отличный от того, над чем вы работаете. Убедитесь, что вы прекратили отладку, остановите свой локальный веб-сервер, очистите и восстановите, как предложил Питер, дважды проверьте ваши global.asax и global.asax.cs и попробуйте снова.

Если это не работает и вы используете локальный IIS, попробуйте удалить сайт в IIS Manager и заново создать его вручную.


4
Действительно очень странная ошибка. Я развернул в IIS на сервере и получил это. Уборка и перекомпиляция работали на меня тоже.
Петр Кула

2
Очистить / Перестроить + заново создать Виртуальный каталог, и тогда он заработал.
fantastik78

4
Была проблема, когда у меня был один и тот же проект, открытый в двух экземплярах Visual Studio. Поэтому у меня было два экземпляра IIS Express. Я должен был закрыть один, и тогда это было решено.
lvmeijer

4
Вы также можете попробовать удалить папки bin / obj в вашем проекте.
Арни

1
Я следовал этим инструкциям и добавил несколько дополнительных очисток / перестроений, изменил пробелы в файле .asax, переформатировал мои мониторы и сделал джиг-джиг, сопровождаемый трубами Пана, и это, похоже, помогло.
MrBoJangles

207

Убедитесь, что выходной путь проекта (свойства проекта / Сборка) установлен, binа не bin\Release илиbin\Debug

По какой-то причине IIS (сервер разработки VS или локальный IIS) всегда обращается к библиотекам из binкаталога (и не ищет подкаталоги)


27
Кредит, где это должно. Исправил мою проблему, мое приложение было настроено на использование bin \ Debug, изменив его на bin, разрешив его. Большое спасибо.
Джои Боб

Было интересно узнать, что проекты ASP.NET не используют путь вывода по умолчанию bin / $ (Configuration) /. Большое спасибо за ответ!
Яан Варус

2
@JamesPusateri: будь осторожен, хотя. Каждый раз, когда вы запускаете, он будет использовать то, что находится в / bin. Так что, вероятно, результат этой сборки, которую вы сделали после того, как изменили ее.
Винсент де Лагабб

1
Вау, в 2018 году IIS все еще работает таким образом. Плохо, очень плохо для Microsoft. Спасибо!
Родриго Т.

1
почти 7 лет ничего не меняется, совет все равно помогает
Юрий Викулов

33

Попробуйте изменить файл global.asax (просто где-то добавить пробел) и перезапустить. это заставит встроенный веб-сервер обновить и перекомпилировать файл global.asax.

Также сделайте чистку и перестройте - должны решить проблему


4
Модификация global.asax ничего не сделала для меня, но чистая и восстановленная исправила проблему :)
NightShovel

У меня была эта проблема, когда у меня кончились силы. Очистить и восстановить помогло. Спасибо!
Горги Ранковски

Очистить не удалось. Сборка не удалась. У меня не было проблем с моим путем сборки. Это, однако, сделал свое дело. Спасибо!
egandalf

Спасибо за ваш ответ Мистер Маннингс
дада

30

Иногда это происходит, если вы изменили информацию о пространстве имен (уровень проекта или класса) после того, global.asaxкак сгенерировано.

Щелкните правой кнопкой мыши Global.asaxфайл и выберите «Открыть с помощью», а затем выберите «Редактор XML (текст) с кодировкой» (другие редакторы также могут работать, но это то, что я использую).

Затем отредактируйте раздел «Наследование» в директиве XML

<% @ Application Codebehind = "Global.asax.cs" Inherits = "GodsCreationTaxidermy.MvcApplication" Language = "C #"%>)

чтобы оно соответствовало фактическому полному имени вашего класса Application. И это все.

Другой вариант - скопировать весь ваш код из Global.asax.cs, а затем удалить и создать другой файл Global.asax (а затем скопировать код обратно в Global.asax.cs).


Это сработало и для меня. Я изменил пространство имен для сборки для всех проектов в решении. Поэтому пришлось отредактировать Global.asaxфайл, как указано в этом ответе, и привести его в соответствие с настройками конфигурации проекта.
Шива

21

Я закрыл и снова открыл визуальную студию, и это сработало.



11
Сначала мы все должны попытаться выйти из машины, закрыть все двери, а затем снова вернуться.
пижика

нет, вы должны закрыть двери на ВСЕХ ваших автомобилях одновременно.
BlackICE

17

Я должен был пойти в BUILD -> MANAGER КОНФИГУРАЦИИ и - хм - поставить галочку рядом с моим проектом, чтобы убедиться, что он действительно будет построен.


2
Я не понимаю, отрицательный голос. Это могло бы потенциально быть решением. Это на самом деле более актуально, чем многие думают ... Если не проверять, это не всегда самое очевидное место. Особенно, когда есть несколько конфигураций.
Энтони Мейсон,

Мне нравится ваш ответ и ваши рассуждения!
UKM

1
Это тоже была моя проблема, и я понятия не имею, как проекты были отменены из конфигурации.
Сет

5

У меня была эта проблема сегодня, и мне потребовалось некоторое время, чтобы найти причину.

По сути, мой основной проект VS2015 включал подпроект, который был построен с использованием более высокой версии .Net Framework.

Как ни странно, когда у вас возникнет эта проблема, VS2015 с радостью сообщит, что решение построено нормально, но когда вы попытаетесь запустить веб-сайт, он просто выдаст вам вводящую в заблуждение ошибку, предполагая, что ваш Global.asax.csфайл неправильный.

Итак, если вы видите эту ошибку, а Очистка / Восстановление не помогает, откройте Referencesдерево вашего Проекта и проверьте восклицательные знаки.

введите описание изображения здесь

Кроме того, проверьте свое Outputокно для сообщений как это:

The primary reference "C:\Projects\Business Objects 4\bin\Release\BusinessObjects.dll" 
could not be resolved because it was built against 
the ".NETFramework,Version=v4.5" framework. 
This is a higher version than the currently targeted framework
".NETFramework,Version=v4.0".

Решение, конечно же, состоит в том, чтобы щелкнуть правой кнопкой мыши по вашему основному проекту, выбрать верхнюю вкладку «Приложение» и изменить версию Target Framework на более высокую версию, соответствующую вашему подпроекту.

Раздражает, что Visual Studio 2015 позволит вам полностью создавать и запускать Решения, которые спокойно содержат эту проблему. Это напрашивается на неприятности ..!


2

Вы также можете проверить свойства вашего сайта в IIS. (В IIS щелкните правой кнопкой мыши сайт и выберите «Свойства».) Убедитесь, что параметр «Физический путь» указывает на правильный путь для вашего приложения, а не для какого-либо другого приложения. (Это исправило эту ошибку для меня.)


2

Я только что столкнулся с этим в приложении MVC5, и у меня ничего не получалось. Это произошло сразу после того, как я попытался вернуть SVN к более старой версии проекта.

Мне пришлось удалить global.asax.cs, а затем добавить новый, щелкнув правой кнопкой мыши Project -> Add New Item -> Global.asax, и ТО, наконец, исправило это.

Просто подумал, что это может кому-то помочь.


Если это исправит вас, возможно, что-то напутало в свойстве «Build action» существующего global.asax.csфайла. Должно быть установлено значение «Компилировать». Действие сборки самого global.asaxфайла должно быть установлено в «Содержимое».
Стивен Лиекенс

Я сделал именно то, что сделал @iAteABug_And_iLiked_it, и проблема была решена!
цинк цинк

2

Я должен сообщить, что я попробовал по крайней мере 4 предложения из этого поста. Никто из них не работал. Тем не менее, я рад сообщить, что выздоровел, вернувшись из резервной копии. Только пришлось обновить мои последние изменения кода из файла журнала. Заняло не более 10 минут. Потратил 3 раза, чтобы прочитать этот пост и попробовать другие предложения. Сожалею.

Это была очень странная ошибка. Удачи всем, кто столкнулся с этим гремлином.


2

У меня та же проблема, когда у меня есть 2 экземпляра Visual Studio, работающие в одном проекте. Поэтому я закрыл обе Visual Studio и открыл только один экземпляр, и теперь он работает нормально!


2

Я работал над старым «основанным на папках» веб-проектом ASP.NET (который мне не нравится) - и обнаружил, что это мое исправление:

Создать App_Codeпапку (если у вас ее еще нет)

Переместить Global.asax.vbфайл в App_Codeпапку

Разметка в Global.asax может пропускать любые пространства имен (по крайней мере, для этого стиля проекта, afaik):

<%@ Application Codebehind="Global.asax.vb" Inherits="MyApp" Language="VB" %>

... где «MyApp» - это имя класса, определяемого в Global.asax.vb


2

«СТРОИТЬ -> МЕНЕДЖЕР КОНФИГУРАЦИИ и - гм - поставьте галочку рядом с моим проектом, чтобы убедиться, что он действительно будет построен». Помогло это и переход в папку проекта в проводнике Windows, нажатие опций и снятие флажка «Только для чтения».


просто у меня это сработало. Проект не имеет встроенной опции, я не знаю почему, но этот обходной путь был тем, что мне было нужно, спасибо.
willyMon


1

Я тоже столкнулся с той же проблемой. Несмотря на следование каждому ответу, это не сработало. Затем я изменил «Inherits = namespace.class » на «Inherits = полное имя сборки », т.е. «Inherits = namespace.class, имя сборки, Version =, Culture =, PublicKeyToken = » Надеюсь, это поможет.


1

Это также может произойти, если вы случайно забыли установить для своего решения VS «Несколько загрузочных проектов», если вы используете Web и WebApi из одного решения.

Вы можете проверить это, щелкнув правой кнопкой мыши Solution в Solution Explorer и выбрав «Properties». Затем найдите «Startup Projects».


Мой был похож на это: я использовал неправильный проект API в решении. На самом деле у меня была ошибка компилятора в API, который, как я думал, был запущен, но VS не уловил его, когда я запустил решение, даже после очистки.
Джон

1

Удалить .vsкаталог из корня решения. Clean. Перестроить.

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


Несколько часов пробовали тысячу других предложений, и это то, что сделало это для меня. Мое приложение работало нормально в Visual Studio, как в конфигурации отладки, так и в выпусках, но после публикации в IIS я получил ошибку. Удаление папки .vs и повторное развертывание устранили проблему.
Филипп Стратфорд

1

Да, я прочитал все ответы. Однако, если вы я и вытаскиваете все, что осталось от ваших волос, попробуйте проверить папку \ bin. Как и большинство proj-файлов, может иметь несколько конфигураций, сгруппированных в элементе XML PropertyGroup, затем я изменил OutputPathзначение с «bin \ Debug», чтобы удалить часть «\ Debug» и перестроить. Это поместило файлы в папку \ bin, что позволило Express IIS найти и загрузить сборку. Меня интересует, как правильно управлять этими сборками, чтобы локальное отладочное развертывание могло найти и загрузить целевую среду.


Это единственное, что сработало. Так много погребенных тел ... это такие вещи, которые заставляют меня серьезно задуматься о других призваниях.
доверяю

0

Эта проблема была решена путем предоставления прав доступа к папке, а также проверки из IIS.

Мне дали разрешение всем, когда я тестирую в моей местной среде. Но в режиме публикации я думаю, что мы даем только разрешение пользователю ASP.Net.


0

Я также получил ту же ошибку ... проверьте имя приложения, которое вы разработали правильно, т.е. выделено пространство имен и имя сборки, а также попробуйте физически изменить имя папки, созданной для приложения, все это должно совпадать с именем в указанном выше пространстве имен, представленном в файле global.asax


0

Я также получил ту же ошибку ... проверьте конфигурацию IIS вашего виртуального каталога и убедитесь, что свойства - ASP.NET - версия ASP.NET совпадают с Project Properties - Application - Target Framework. (Это исправило эту ошибку для меня.)


0

Мое приложение было построено в более старой версии VS и не имело папку bin. Я обновил его до более новой версии, и мне приснился кошмар. Я наконец отследил эту ошибку до Проекта> Свойства> Приложение. Целевая структура была установлена ​​на 2,0; изменение его на сервере для соответствия в IIS Manager / App Pool решило проблему для меня.


0

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


0

Проблема для меня в том, что я не включил global.asax.cs в свой проект. И поскольку я копировал файлы из .net 4.5 в 4.0, я не закомментировал строки, которые не нужны в 4.0. Потому что он не был включен Visual Studio скомпилировал его в любом случае без проблем. Но когда я включил его, он выделил строки, которые вызывают проблемы.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
//using System.Web.Http;
using System.Web.Mvc;
//using System.Web.Optimization;
using System.Web.Routing;

namespace YourNameSpace
{
    public class WebApiApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            //GlobalConfiguration.Configure(WebApiConfig.Register);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            //BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
    }
}

0

Я провел буквально день, пытаясь решить эту проблему.

Единственное, что сработало, - это удаление файла .sln, создание нового и добавление проектов по одному.

¯ \ _ (ツ) _ / ¯ - Программирование - ¯ \ _ (ツ) _ / ¯


0

В моем случае, веб-сборка была частью GAC ... поэтому после сборки ее нужно установить в GAC, и она заработала.


0

Я столкнулся с этим сообщением об ошибке и в итоге обнаружил, что сообщение об ошибке вводит в заблуждение. В моем случае в IIS, по-видимому, возникла проблема с маршрутизацией, из-за которой файл global.asax с другого сайта на веб-сервере читался, создавая ошибку.

В IIS мой сайт был связан с http: * 80: webservices.local и содержал приложение под названием MyAPI. Я получил страшное сообщение при вызове приложения MyAPI с использованием IP-адреса веб-сервера.

Чтобы успешно вызвать мое приложение, мне пришлось добавить запись файла хоста для webservices.local на всех машинах, которые вызывали приложение MyAPI. Затем все мои запросы должны были иметь префикс http: //webservices.local/MyAPI/ для правильной маршрутизации.


0

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

В итоге я просто загрузил решение в 2015 году, и оно решило его для меня.


0

Я провел несколько дней по этому вопросу. Я, наконец, решил ее с помощью следующей комбинации предложений из этого поста.

  1. Измените цель платформы на Любой процессор. У меня не было этой конфигурации в настоящее время, поэтому мне пришлось пойти в Configuration Manager и добавить ее. Я специально собирал для х64. Одно это не решило ошибку.
  2. Измените путь вывода bin\вместо bin\x64\Debug. Я пробовал это уже несколько раз, прежде чем сменил цель платформы. Это никогда не имело никакого значения, кроме получения ошибки, из-за которой не удалось загрузить сборку из-за неверного формата.

Чтобы было ясно, я должен был сделать оба из них прежде, чем это начало работать. Я попробовал их по отдельности несколько раз, но это никогда не исправляло, пока я не сделал оба.

Если я изменю один из этих параметров обратно на исходный, я снова получаю ту же ошибку, несмотря на то, что я запустил Clean Solution и вручную удалил все в binкаталоге.


0

Два способа получить это:

  • Диспетчер конфигурации показывает сборки dll в виде сочетаний сборок '64' и 'any cpu'. Помещение их в одну сборку исправляет это.

  • При переключении между ветвями экспресс-путь IIS иногда не обновляется. Щелкните правой кнопкой мыши «IIS Express» на панели задач> Показать все приложения и убедитесь, что путь к правильной ветви.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.