«Не удалось загрузить тип [Namespace] .Global», что меня огорчило

106

В моем приложении .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 он компилируется нормально

gkdm
источник
Другие страницы в приложении работают? Иногда это происходит, когда веб-сервер настроен на запуск 1.1, но приложение скомпилировано для 2.0
Noon Silk
да, "Target Framework" - 2.0
gkdm

Ответы:

162

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

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

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

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

Стантона
источник
13
Также: попробуйте закрыть и снова открыть VS. Если вы используете встроенный сервер отладки, возможно, на нем работает другой веб-сайт. Открытие / закрытие приведет к перерегистрации портов localhost.
BradLaney
1
В моем случае он хотел поместить вывод проекта в inetpub \ wwwroot \ myproject \ bin, но я настроил iisexpress для просмотра в myProject \ bin. Простое изменение пути вывода решило проблему.
shindigo
В моем случае у меня была .dll, которая должна была быть включена, но по какой-то причине не была настроена на «локальное копирование». Это вызвало проблему компиляции, аналогичную той, которая указана в этом ответе.
HockeyJ
Спасибо, Стентона. Это то, что у меня сработало, и как раз вовремя, чтобы вернуться домой.
Билл Норман
3
Изменение пути вывода проекта в папку bin решило проблему. Спасибо за спасение моего дня!
Tunahan
18

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

ФилПурсглов
источник
Что ты думаешь я должен сделать?
gkdm 05
1
Проверьте пространство имен в вашем файле .cs и убедитесь, что оно такое же, как и в файле asax. Я подозреваю, что они будут другими ...
PhilPursglove
Тогда я не уверен. Все, что я могу предложить прямо сейчас, - это перестроить и проверить содержимое пространств имен в вашей сборке с помощью ILDASM.
PhilPursglove 05
Спасибо, это решение помогло мне. Я буду использовать Resharper для проверки всех пространств имен в моем решении.
Леонард
У меня только что произошло следующее: в проекте MVC 5 (не то чтобы это имеет значение), я изменил пространство имен проекта, но забыл изменить Global.asax (и папку App_Start). Независимо от опыта, иногда глупые оплошности все равно вас достают.
Джейсон Снелдерс
15

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

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

public partial class Global : System.Web.HttpApplication
Шри
источник
1
Не уверен, почему мой глобальный файл оказался без этого, но это была проблема для меня, спасибо!
ginja
9

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

Манодж Аттал
источник
2
то же самое сработало для меня. Убедитесь, что вы закрыли ВСЕ открытые Visual Studio.
alansiqueira27
5

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

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

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

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

Джон Лейдегрен
источник
5
  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
        //
    }
}

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

десятичный
источник
3

Проверьте действие сборки Global.asax.cs. Он должен быть установлен на Compile.

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

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

jyoungdev
источник
3

У меня возникла аналогичная ошибка при наличии

<clear/>

пометить как дочерний элемент (первый ребенок)

<assemblies>

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

Джейсонджонсутах
источник
Это определенно указывало мне в правильном направлении. В конце концов, я поместил <clear /> в родительский каталог, так как это был пустой заполнитель. Я считаю, что настоящая проблема заключалась в том, что он очистил сборки, на которые ссылалось мое приложение, что предотвратило загрузку сборки приложения.
Дуг Ламп
Я тоже испытал это - удаление выбранных сборок явным образом вместо очистки списка сработало хорошо.
Arve Systad
2

В моей ситуации это было связано с типом проекта веб-сайт / веб-приложение. Недавно мы перешли на MVC, и нам пришлось заменить его на веб-приложение.

Итак, решение было простым: выберите свой веб-сайт в обозревателе решений и удалите его из решения, затем щелкните решение правой кнопкой мыши и выберите Добавить -> Существующий проект ( не веб-сайт ), перекомпилируйте веб-сайт.

Сергей
источник
2

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

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

Mjroodt
источник
2

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

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

http://localhost/MyApp" 

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

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

BrDaHa
источник
2

Я преобразовал свое решение из VS2003 в VS2010, и у меня возникли проблемы с преобразованием проекта веб-приложения.

Я испытал ту же проблему, и ни один из ответов не помог мне.

Для меня сработало:

  • Щелкните правой кнопкой мыши решение и выберите Configuration Manager.
  • Просмотрел каждую из конфигураций в раскрывающемся списке «Конфигурация активного решения».
  • Включил веб-приложение в сборку, установив флажок «Сборка».

Казалось бы, проблемы, которые у меня возникли при конвертации, по какой-то причине удалили проект веб-приложения из сборки.

Надеюсь, этот ответ поможет любому, у кого есть такая же проблема ...

мезоид
источник
1

Если вы перестраиваете или изменяете проект и перемещаете файлы из старого, не забудьте проверить блок Inherit вашего global. В моем случае бывший проект / решение было названо интрасетью, и я воссоздал его как интрасеть, но когда я перемещался по файлам, ему не нравились строчные буквы (да). Просто просмотрите имена файлов.

архангел76
источник
1

Измените GUID сборки. Я обнаружил, что это решает МНОГИЕ проблемы.

Натан М
источник
Как поменять GUID?
Дрю Чапин
1

У меня были похожие проблемы, когда я получал эту ошибку в проекте.

Could not load type [Namespace].Global
Error in Line 1   etc etc

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

Я не знаю, почему Visual Studio не выдала мне эту конкретную ошибку во время отладки. Но эта ошибка может возникнуть из-за некоторых ошибок в файле класса ..

панки шарма
источник
1

Эта работа для меня: Первое: кажется, что независимо от того, что вы говорили визуальной студии, ide всегда просматривает файл в: bin (для веб-приложения и, конечно же, в моем случае) Итак, даже когда я сказал Visual Studio конкретный путь для загрузки файла, ide продолжает искать неправильный путь. Поэтому я меняю в: Build / Configuration Manager тип вывода на: Release (ранее я очищал решение, даже вручную), поэтому, когда файл .dll был создан, я вручную переместился в папку «bin» в проекте / решении. папка. Надеюсь, это будет полезно !!

Galimatias
источник
1

В моем случае это было из-за моего целевого процессора (x64), я изменил его на x86, очистил проект, перезапустил VS (2012) и перестроил проект; потом его не было.

большой пони
источник
1

Когда я столкнулся с этой проблемой совсем недавно, я попробовал все, что здесь упоминалось, но безрезультатно. Вырвав волосы, я решил попробовать удалить всю свою базу кода (да, в довольно отчаянии!), А затем повторно загрузил все из моего репозитория кода. После этого все снова заработало нормально.

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

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

TL; DR; Если все ответы в этой цепочке не работают для вас, попробуйте удалить, а затем повторно загрузить всю базу кода!

Бен Смит
источник
1

Я сталкивался с этой проблемой несколько раз, и в каждом случае я перестраивал компьютер или переключался на новый компьютер. Мой первый шаг (помимо обновления машины и установки Visual Studio) - это вытащить мои проекты из Git и протестировать их.

Я сталкиваюсь с этой ошибкой каждый раз, потому что пытался получить доступ к своему локальному коду перед его компиляцией. Видите ли, у меня есть настройки Git и Subversion, чтобы игнорировать мои папки bin / build, поэтому после извлечения из моего репозитория я забыл запустить сборку, которая извлекает необходимые пакеты из Nuget (поскольку у меня Git / SVN тоже игнорирует их) и создает DLL, необходимые для запуска моего приложения.

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

Капитан Рошфор
источник
1

В моем случае я добавил Global.asax в проект WCF, чтобы поэкспериментировать с ним, но решил удалить его. Я удалил его из обозревателя решений, но поскольку он все еще находился в папке, конвейер все еще находил его и вызывал эту ошибку.

Я удалил Global.ASAX и GLobal.asax.cs из файловой системы, и это устранило ошибку.

Фасоль
источник
ЭТО решило эту проблему для меня, спасибо, но я также хотел бы добавить для других в будущем, что в моем случае я никогда не добавлял Global.asax в свой проект. Но, как упоминалось здесь, файлы global.asax и global.asax.cs находились в моей файловой системе. Когда я их удалил, ошибка исчезла.
stackonfire
1

Проработав в разработке почти 20 лет, этот каштан продолжал мучить меня в нескольких проектах.

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

Для меня для простого веб-приложения на основе службы, настроенного для запуска / отладки через IIS, он менял выходной путь с bin \ debug на bin \, что разрешило его

Проект> Свойства> Сборка> Выходной путь

Серьезно надеется, что это поможет.

тихо
источник
0

Я был сбит с толку той же чертовой проблемой. Я пытался удалить иglobal.asax (закрыл VS2010 перед добавлением). Очистил проект / решение, проверил любые изменения в конфигурации веб-приложения и другие вещи, которые работали для других людей здесь, в потоках SO. Я наконец очистил решение, удалил папки bin / obj и остановил все запущенные серверы разработки VS2010, затем отменил все изменения и обнаружил, что приложение снова работает. Я переделал то же самое, и теперь он работает нормально.

Произошло снова, и на этот раз это решение сработало для меня.

ярость
источник
0

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

Мэтью Харт
источник
0

Мне пришлось удалить (дублировать) файлы с диска, которые не были включены в проект. Похоже, дубликаты были вызваны неудачным переименованием. Имена файлов были разные, но код одинаковый.

После удаления всех файлов oof. * Я смог просканировать.

  • foo.aspx
  • foo.aspx.cs
  • foo.aspx.designer.cs
  • oof.aspx
  • oof.aspx.cs
  • oof.aspx.designer.cs
Эрик Рольфс
источник
0

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

C:\Users\Your-User-Name\Documents\IISExpress\config\applicationhost.config

и найдите порт, вы найдете <site>...</site>тег, который вам нужно удалить или прокомментировать

Mo Hrad A
источник
0

У меня была эта проблема при развертывании только на prod server. В других моих средах это работает ... Я просто удалил материал в папке bin, затем повторно опубликовал, и после этого он работал.

Рафаэль
источник
0

Если вы используете Visual Studio, вероятно, вы пытаетесь запустить приложение в режиме выпуска, попробуйте изменить его на режим отладки.

притворство
источник
0

Я безуспешно пытался восстановить решение и очистить временные файлы ASP.NET.
Но после запуска IISRESET ошибка исчезла.

Обновление : через месяц у меня снова возникла та же проблема. Я заметил, что MyWebsite.DLL существует в папке bin, но не существует во временных файлах ASP.NET (C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET Files). Я пробовал несколько вещей, которые предлагаются по этому поводу и «Сообщение об ошибке парсера: не удалось загрузить тип» в вопросах Global.asax (я действительно забыл о своем собственном ответе), но ошибка снова исчезла только после IISRESET

Майкл Фрейджейм
источник
0

Что ж, в моем случае VS 2017 эта проблема вызывала легкая загрузка решения. Я отключил его и перезапустил VS, затем восстановил свое решение, и проблема исчезла.

Сиддхарт Кумар
источник
2
Что такое «легкое» решение?
Fandango68
0

Просто хотел добавить свои два цента. Я получал ту же ошибку, и безрезультатно пробовал все предложения. Моя ситуация, наверное, другая?

Оказалось, что в автоматически созданном файле AssemblyInfo.cs были лишние пробелы, которые мешали мне запустить веб-приложение (через отладку). Вот как выглядел файл:

[assembly: AssemblyTitle("WebApplication2")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("

            ")]
[assembly: AssemblyProduct("WebApplication2")]
[assembly: AssemblyCopyright("Copyright © 

             2017")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

Убив пробелы в AssemblyCompany и AssemblyCopyright, я наконец смог собрать и запустить проект.

Наблюдается в следующей среде: --Visual Studio 2017 Community версии 15.3.0 - Win 7 x64 Enterprise - Новый проект> Visual C #> Интернет> Веб-приложение ASP.NET> Веб-формы

raydlevel5
источник