«Не удалось загрузить тип [Namespace] .Global» вызывает у меня горе - PullRequest
105 голосов
/ 05 января 2010

В моем приложении .Net 2.0 Asp.net WebForms мой Global.asax содержит следующий код:

<%@ Application CodeBehind="Global.asax.cs" Inherits="MyNamespace.Global" Language="C#" %>

Однако при сборке я получаю сообщение об ошибке -

Не удалось загрузить тип «MyNamespace.Global».

Похоже, это связано с тем, что пространство имен MyNamespace (определенное в коде файла Global.asax.cs) не отображается компилятором в файле Global.asax (не отображается в R # intellisence ..). Это оказалось очень крепким орешком ... любая помощь будет оценена по достоинству!

Примечание. Global.asax и Global.asax.cs находятся в одной папке.

Примечание 2: При компиляции из приглашения vs с помощью csc он компилирует o.k.

Ответы [ 32 ]

161 голосов
/ 21 мая 2011

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

Если вы укажете x86 в качестве платформы сборки, Visual Studio автоматически назначит bin / x86 / Debug в качестве выходного каталога для этого проекта. Это совершенно справедливо для других типов проектов, кроме веб-приложений, где ASP.NET ожидает, что сборки будут выводиться в папку Bin.

Что я обнаружил в моей ситуации, так это то, что они выводились в оба (Bin и Bin / x86 / Debug), за исключением того, что некоторые из dll, и необъяснимо самым важным является dll вашего веб-приложения, отсутствуют из папки Bin.

Это, очевидно, вызвало проблему компиляции и, следовательно, исключение «Не удалось загрузить тип Global». Очистка решения и удаление сборок не имели значения для последующих сборок. Моим решением было просто изменить путь вывода в настройках проекта для веб-приложения на Bin (вместо bin / x86 / Debug).

17 голосов
/ 05 января 2010

Вы изменили пространство имен вашего проекта? Я иногда видел, как это происходило, когда я изменял пространство имен в диалоговом окне «Свойства проекта», но Visual Studio не изменил объявление namespace в существующих файлах кода.

14 голосов
/ 28 июня 2010

Я новичок в разработке asp .net и столкнулся с подобной проблемой.

Я обновил класс как класс partial, и он работал нормально.

public partial class Global : System.Web.HttpApplication
9 голосов
/ 26 ноября 2014

Я перезапустил Visual Studio, и ошибка исчезла!

4 голосов
/ 07 апреля 2016
  1. Щелкните правой кнопкой мыши Project Solution и выберите Batch Build.
  2. Затем выберите название вашего проекта и очистите и восстановите.

Прекрасно работает для меня в VS 2015. Теперь я могу использовать глобальное событие. В моем Global.asax файле есть эта строка

<%@ Application Language="C#" CodeBehind="~/App_Code/Global.asax.cs" Inherits="Global" %>

И я создаю файл класса Global.asax.cs, который находится в папке AppCode, который выглядит как

public partial class Global : HttpApplication
{
    public Global()
    {
        //
        // TODO: Add constructor logic here
        //
    }
}

Надеюсь, это поможет

4 голосов
/ 16 апреля 2014

Вот еще один для книг. Похоже, это происходит, когда вы запускаете более одного веб-приложения с одним и тем же номером порта.

По сути, у меня есть несколько веток, с которыми я работаю, у меня есть основная ветвь, промежуточная ветвь и ветвь релиза. Когда я переключил ветвь на промежуточную ветвь, я заметил, что она использует ту же конфигурацию адреса порта, поэтому я решил изменить это. Затем я получил другое предупреждение, что это резервирование конфликтует с другим настроенным приложением. Сервер IIS Express чувствителен к этому и по любой причине блокирует конфигурацию.

Просто выбрав третий незатронутый порт, эта проблема исчезла, потому что затем он сопоставляет порт с новым отображением каталога (мои ветви по-разному расположены на диске). Я заметил это, потому что пытался изменить имя типа, на которое указывает Global.asax, но имя типа не изменилось даже после перезапуска сервера, поэтому ясно, что код, который я изменял, не отражался при развертывании IIS Express.

Итак, прежде чем вы потеряете слишком много сна из-за этого, попробуйте изменить номер порта IIS, который в настоящее время используется для запуска веб-проекта.

3 голосов
/ 07 января 2010

Проверьте действие по созданию Global.asax.cs. Должно быть установлено значение Compile.

В обозревателе решений щелкните правой кнопкой мыши файл Global.asax.cs и выберите «Свойства». На панели «Свойства» установите действие «Построить» (пока отладка , а не ).

Похоже, что VS 2008 не всегда правильно добавляет файлы .asax (.cs) по умолчанию.

2 голосов
/ 07 декабря 2013

Ничто из этого не сработало для меня, к сожалению. Исправление, которое я нашел, было более специфичным для разработки, в частности, отладки на вашем локальном компьютере. Также, к сожалению, это не решает проблему так, как я надеялся, но если вы на грани остроумия, это может заставить вас снова работать.

TL; DR. В свойствах проекта на вкладке "Интернет" в разделе "Серверы" выберите "Использовать локальный веб-сервер IIS". Адрес,

http://localhost/MyApp" 

уже заполнено (у меня IIS7, .NET 4.0). Первоначально было выбрано «Использовать Visual Studio Development Server» с виртуальным путем «/»

Что меня действительно озадачивает, так это то, что больше ничего не помогло, я просмотрел все предложения, которые мог найти на SO, и ничего не сработало. Странно то, что ошибка была (казалось, прошло несколько месяцев с тех пор, как я в последний раз смотрел), когда я добавил новый файл ascx, который был похож на существующий, который был добавлен из старого проекта .net 2.0 (я думаю) это позволило бы настраивать управление пользователями из приложения. Это работало, прекрасно, долгое время, пока я не попытался добавить этот новый файл. Добавив его и увидев ошибку, я быстро отменил все изменения, но ошибка Global.ascx не исчезла бы, даже не взорвав весь проект и не получив последнюю информацию из системы контроля версий.

2 голосов
/ 31 августа 2012

Я столкнулся с подобной ошибкой при наличии

<clear/>

тег как ребенок (первый ребенок) из

<assemblies>

тег в моем Web.config . Я вставил теги в свой файл web.config, чтобы предотвратить наследование конфигурации в приложении, развернутом на веб-сайте по умолчанию в IIS.

2 голосов
/ 23 августа 2012

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

Следуйте инструкциям на этой ссылке . Я все еще получил ошибку global.asax, но все, что я сделал, это удалил ее и заново добавил, щелкнув правой кнопкой мыши по проекту в visual studio и выбрав добавление нового элемента. Добавьте файл global.asax и все заработало.

...