Ошибка: allowDefinition = 'MachineToApplication' за пределами уровня приложения

193

Я скачал онлайн-проект в ASP.Net. При запуске приложения я получаю сообщение об ошибке

Ошибка использовать раздел, зарегистрированный как allowDefinition = 'MachineToApplication', за пределами уровня приложения. Эта ошибка может быть вызвана тем, что виртуальный каталог не настроен как приложение в IIS.

Какие изменения я должен сделать в web.config или в другом месте, чтобы эта работа?

Deepali
источник
53
Ни один из ответов, найденных в Интернете, не работал для меня. Моя проблема была решена путем показа всех скрытых файлов / папок и удаления objпапки.
Человек
6
Эта проблема все еще проявляется в VS2012. Я открыл сообщение об ошибке в Microsoft. Если у вас возникли проблемы, отправьте сообщение об ошибке connect.microsoft.com/VisualStudio/feedback/details/779737/…
Эрик Дж.
4
удаление папки obj решило и эту проблему для меня. спасибо @ Ник! (извините за возрождение)
Джордан Уэйн Крэбб
РЕШЕНИЕ ЗДЕСЬ: stackoverflow.com/questions/9300927/…
benni_mac_b
в моем случае, дополнительные web.config в подпапке вызывают эту проблему. Когда я удаляю этот лишний файл web.config, ошибка исчезает
Dio Phung

Ответы:

96

Я только что столкнулся с этим "восторгом". Похоже, он появился сразу после того, как я опубликовал веб-приложение в режиме релиза.

Единственный способ последовательно обойти проблему, которую я обнаружил, состоит в том, чтобы следовать этому контрольному списку:

  1. Чистый раствор, пока ваше решение настроено в режиме выпуска.
  2. Чистое решение, пока ваше решение настроено в режиме отладки.
  3. Постройте, пока ваше решение настроено в режиме отладки.
Джон Рейли
источник
18
Единственный ответ, который работал для меня тоже. После этого меня ждали многие другие ошибки, но они не были связаны. Я пришел сюда, установив MvcBuildViewsдля true.
Бенджамин
+1 Кстати: я думаю, причина, по которой это сработало для меня, заключалась в том, что самая последняя сборка, которую я имел, была Debug . Я открыл решение, исправил ошибку и попытался выполнить сборку в режиме R Release . Очистка в Release не сработала, но очистка в Debug прошла. (Вероятно, нужно было комбинирование из 2, то есть очистить любые старые ссылки на dll, будь то Debug или Release ).
Scotty.NET
4
Я сделал чистку , затем перешел к * свойствам проекта -> Веб -> Создать виртуальный каталог и затем проблема была решена
gldraphael
Очистка и восстановление в режиме отладки - это все, что мне нужно. Нет необходимости переключаться между выпуском и отладкой. Но да, ЧИСТЫЙ очень важен. Это суть дела.
markaaronky
1
Чистота не доступна в моем случае, который я никогда не видел раньше. Это очень старое приложение VB.NET, которое я унаследовал от бывшего коллеги.
tnk479
82

Просто наткнись на этот пост, и это происходит со мной.
Просто Cleanпроект и ошибка уходит. (должен быть ошибкой VS2010)

Эдуардо Молтени
источник
это решение, если вы получаете это как ошибку в Visual Studio.
Гидеон
22
Иногда clean не очищает objпапку. Это иногда тоже нужно удалить.
Jaypeagi
1
Ни Clean, ни удаление obj не сработали. Решение Джонни Рейли сработало для меня.
Бенджамин
Чтобы избавиться от этого, мне нужно было запустить как в режиме отладки, так и в режиме выпуска. Запуск только для отладки, похоже, не решил проблему.
Юха Паломяки
Та же проблема все еще существует в VS2013SP1. Простая очистка позволяет мне развернуть снова.
Брайан Кноблаух
25

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

Я только что удалил папки bin и obj, запустил Clean Solution и собрал его заново, на этот раз без проблем.

xiecs
источник
2
Это единственное решение, которое работало для меня в VS Express 2012 для Web. Кроме того, я начал получать эту ошибку только после того, как создал конфигурацию решения и добавил MvcBuildViews, установленный в true, к свойству PropertyGroup в источнике .csproj.
Джереми Кук
20

Никто. Вам нужно настроить каталог, в котором вы разместили сайт, как веб-приложение в IIS .


источник
1
Хотя технически это изменение «в другом месте, чтобы сделать эту работу»;)
Жаф - Бен Дугид
2
и это решение, если вы получаете это как ошибку в вашем веб-приложении! = P
Гидеон
Я уже был настроен как приложение. Решение Джонни Рейли сработало в моем случае.
Бенджамин
Я просто пытаюсь заставить работать приложение шаблона Webforms. Это нормально на локальном хосте, но не на сервере в локальной сети. Это решение работало для меня: VS2015 CE, Windows Server 2008 в моей локальной сети. Я использовал эту страницу MS, чтобы объяснить, что делать в IIS: support.microsoft.com/en-gb/kb/917413 . Без изменений в коде шаблона.
Тим
16

Эта ошибка возникает при попытке открыть проект в качестве веб-сайта. Самый простой способ определить, создали ли вы веб-сайт или проект, - это проверить папку вашего решения (то есть, где вы сохранили свой код) и посмотреть, есть ли у вас файл * .sln в корневом каталоге, если вы это сделаете, то вы ' мы создали проект.

Просто чтобы добавить, я столкнулся с этой ошибкой только сейчас, когда я пытался открыть проект, который я создал некоторое время назад, выбрав «Файл», «Открыть веб-сайт» в меню Visual Studio, тогда как я должен был выбрать «Файл», «Открыть проект» вместо. Я нанесла лицо, как только поняла :)

Пит
источник
это тоже была моя проблема
mgrenier
13

В Visual Studio 2013 я некоторое время боролся с этим, и это довольно легко решить, просто следуя тому, что говорится в исключениях: «виртуальный каталог не настроен как приложение в IIS»

В моем случае я WebServiceпосадил внутри IIS websiteтак

  1. Я открыл сайт в IIS менеджере
  2. щелкните правой кнопкой мыши папку WCF
  3. щелкнули Convert to Application
  4. а затем представлены с Ok

WCF вернулся и работает.

Marek
источник
1
Я столкнулся с этой проблемой, когда переместил свое приложение на веб-сайт по умолчанию. Пункт 3 помог мне решить мою проблему.
Бикрам с.
Это сработало для меня, когда мы перешли на новый веб-сервер. После выполнения операции «Преобразовать в приложение» символ папки изменился, и веб-приложение ASP.NET MVC начало работать на этом веб-сервере.
Грег Барт
11

Ошибка предполагает, что код, который вы используете, ожидает, что виртуальный каталог будет настроен на IIS.

Посмотрите документацию и добавьте необходимый виртуальный каталог. Это должен быть каталог, в котором есть web.config(не корневой каталог).

Одед
источник
8
Удаление второго файла web.config из нижнего каталога решило проблему для меня.
Лукас Б
10
Один из моих ребят были свои <authentication mode="Forms"><forms name="..." loginUrl="~/Login/Login/" timeout="2880" /></authentication>в его Web.configв Viewsа затем папке ствола, который вызвал эту проблему.
Серж Саган
10

Если у вас есть проект MVC с включенной сборкой представлений, одним из решений является удаление папки obj перед сборкой. Добавить в файл проекта:

<Target Name="BeforeBuild">
    <!-- Remove obj folder -->
    <RemoveDir Directories="$(BaseIntermediateOutputPath)" />
    <!-- Remove bin folder -->
    <RemoveDir Directories="$(BaseOutputPath)" />
</Target>

Вот статья: Как удалить папку bin и / или obj перед сборкой или развертыванием

шаман
источник
8

Недавнее изменение web.config может быть в неправильном файле web.config.

<machineKey...>Свойство было добавлено Views / web.config . Независимо от того, сколько очищает и восстанавливает, ошибка осталась. Исправление состояло в том, чтобы переместить свойство в корень /web.config .

SushiGuy
источник
Мы случайно скопировали родительский файл Web.config в папку / Views. Поместите туда оригинальную, гораздо меньшую версию для папки Views, и сайт снова заработал.
Grandizer
6

если вы когда-либо сталкивались с этой ошибкой

Ошибка использовать раздел, зарегистрированный как allowDefinition = 'MachineToApplication', за пределами уровня приложения. Эта ошибка может быть вызвана тем, что виртуальный каталог не настроен как приложение в IIS

РЕШЕНИЕ У
меня была такая же проблема с VS 2012. Я решил это

  1. Разгрузите ваш текущий проект
  2. отредактируйте ваш .csproj
  3. Найди это <MvcBuildViews>false</MvcBuildViews>
  4. Вместо false измените значение на true
  5. Загрузите снова ваш проект, и у вас больше не должно быть этой ошибки

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

visar_uruqi
источник
18
Это странно, установка MvcBuildViewsна то true, как я получил ошибку в первую очередь.
Бенджамин
Я также начал получать сообщение об ошибке после изменения MvcBuildViews на true. Я избавился от сообщения об ошибке, изменив значение обратно на false.
Юха Паломяки
3
Я выполнил «Чистое решение» как в режиме выпуска, так и в режиме отладки, и теперь сборка также работает<MvcBuildViews>true</MvcBuildViews>
Юха Паломяки,
@ JuhaPalomäki супер сладкий! Спасибо.
Haroon
У меня была ситуация, прямо противоположная ситуации с @visar_uruqi. Я имею в виду, что в моем файле .csproj у меня была опция MvcBuildViews, установленная в true, и когда я установил в false, ошибка была пропущена (не показана).
Бронек
5

В моем случае проблема появилась только после того, как я опубликовал проект в подкаталоге. Из-за недостатка знаний я поместил свой web_publishподкаталог в web_projectкаталог.

Понятно, что он web_publishсодержит те же Web.configэлементы, что и проект. Тем web_projectне менее, он не знает, что web_publishследует избегать my при поиске Web.configs во вложенных подкаталогах. Таким образом, Web.configs были продублированы и появилась ошибка.

Решение состояло в том, чтобы разместить мой web_publishгде-нибудь еще.

pepr
источник
5

В моем случае там была папка «Backup», в которой находилась еще одна копия всего сайта. Это означало другое, web.configпоэтому сборка не удалась с этой ошибкой. Я удалил папку «Резервное копирование», выполнил чистое решение в сборках Debug и Release, и ошибка исчезла.

друид
источник
У меня была похожая ситуация, кто-то создал подпапку «Опубликованные» в корне веб-сайта на диске (это старый веб-проект, один из тех, у которого нет файла решения), и в нем был файл Web.config. Ошибка произошла, когда Visual Studio попыталась его собрать, и никакие количества Очистки / Удаление папок «obj» и т. Д., Конечно, не исправили это. Я видел довольно много случаев этой ошибки, и это почти всегда дубликат Web.config, скрывающийся где-то ... (тоже очень плохое сообщение об ошибке!)
деталь
4

В моем случае,

Решение содержит 6 проектов, 1 основной и 5 подкаталогов. все подкаталоги, имеющие web.config.

При запуске любой страницы в подкаталогах я получал ту же ошибку.

Я удалил эту строку из web.config,

<authentication mode="Windows"/>

это сработало для меня.

p_champ
источник
Какую строку вы удалили?
Марк Берри
Линия была там, но не показывалась из-за некоторой проблемы с отступом, я думаю. Я отредактировал и вставил код в блок кода, теперь он отображается. Пожалуйста, проверьте и дайте мне знать, могу ли я чем-то помочь.
p_champ
Спасибо, это подтверждает то, что мне это тоже не удалось. У меня только один сайт, поэтому я обошел его, открыв как веб-сайт, а не как проект.
Марк Берри
4

Очистите ваш проект. Удалите папку / obj (возможно, используя publish и deploy? - в ней есть ошибка)

NicoJuicy
источник
Единственное решение, которое сработало для меня. Получил здесь, установив <MvcBuildViews> true </ MvcBuildViews>.
Пол
3

Моя проблема заключалась в том, что я случайно опубликовал свой веб-сервис в заранее установленном месте на новой установке VS2010.

Я опубликовал в папке PreCompiledWeb , и наличие web.config, я подозреваю, испортило его.

Я просто уничтожил папку и обновил проект.

При двойном щелчке по этой ошибке я получил тот ошибочный файл web.config, который сообщил мне об этом.

gaijintendo
источник
2

Это может быть проблема с версией, например, когда вы загружаете проект .Net framework 2.0 и хотите открыть его в VS2008, вам нужно будет обновить его до последней версии, и VS создаст резервную копию папки в том же корневом каталоге. получить ответ здесь .

gofor.net
источник
Ответ Рангана здесь дает некоторые дополнительные детали.
Марк Берри
2

У меня была эта ошибка при создании решения с помощью Web Deployment Project, созданного в моем решении. Я исправляю ошибку, удаляя папку, в которую встроен Web Deployment Project. Эта папка указана в атрибуте «Папка проекта» свойств WDP

Илья
источник
2

Удалить папки bin и obj. Затем перестройте решение.

rovsen
источник
Для проводника файлов используйте поисковый запрос "obj" kind: = folder и "bin" kind: = folder, чтобы найти / удалить эти папки. Это сработало для меня.
Роберт Дж. Гуд
2

Очевидно, в моем решении было два файла web.config. Я использую MVC4, и в разделе Views был другой файл конфигурации, и я вносил изменения не в тот файл. Исправлено там помогло мне.

Но вы всегда можете изменить перенаправление / маршрут по умолчанию в файле global.asax.

Гаутам Бери
источник
1

Возможно, у вас есть папка проекта sub asp.net в папке проекта, которая не настроена как виртуальный каталог. Настройте проект для запуска в IIS.

funwithcoding
источник
1

Я добавил на свой сайт скрипт публикации. В конце удалите папку obj из папки вашего сайта.

Valamas
источник
у вас может быть некоторое понимание: stackoverflow.com/questions/6986738/…
ekkis
1

У меня эта проблема встречается чаще, если в файле проекта включено «true».

  1. Установить ложь

Как говорит Джонни:

  1. Чистый раствор, пока ваше решение настроено в режиме выпуска.
  2. Чистое решение, пока ваше решение настроено в режиме отладки.
  3. Постройте, пока ваше решение настроено в режиме отладки.
Риккардо Басиличи
источник
1

У меня был проект, который я не хотел быть веб-приложением, я хотел, чтобы он был папкой. Ответ заключался в том, чтобы полностью удалить файл web.config. Он принадлежит только в корне приложения.

Роб Седжвик
источник
1

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

ehabh86
источник
4
Привет, добро пожаловать в Stack Overflow! Можете ли вы расширить свой ответ? Не могли бы вы объяснить, как преобразовать папку в веб-приложение? Это поможет другим лучше понять ваш ответ.
Джесси
1
В диспетчере IIS под панелью соединений справа щелкните правой кнопкой мыши каталог под созданными сайтами (или веб-сайтом по умолчанию) и выберите Convert to Application.
Аске Б.
1

У меня такая же проблема в VS 2013 после публикации моего проекта в режиме отладки. Проблема была решена удалением obj / files

Григорий Бушуев
источник
1

У меня есть проект веб-сайта.

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

Даниэль Сильва
источник
1

Для любого, кто все еще ищет, мое решение состояло в том, чтобы удалить обе папки bin и obj и перезапустить Visual Studio, похоже, это исправило.

Рикки Дж
источник
1

Через Visual Studio я опубликовал Службу WCF через FTP на внешний сервер. Это работало нормально локально, и при публикации на внутренний сервер, но не на внешний. Решение состояло в том, чтобы публиковать без предоставления Site Path (другими словами, публиковать непосредственно в корне виртуального каталога).

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

Аске Б.
источник
0

Совет 1: очистить, а затем восстановить.

совет 2: просто закройте VS и снова откройте.

совет 3: загруженный проект может находиться в другой подпапке ... откройте папку, в которой находятся ваши .net файлы.

c: / demo1 / demo / (все файлы)

Вы должны открыть демо из vs ... не demo1.

ученик
источник
0

Я перепробовал все вышеперечисленные решения, но ни один из них не помог мне. (Я уверен, что есть 1000 решений этой проблемы). В моем сценарии я пытался опубликовать свой веб-сервис WCF, который я тестировал, в производство.

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

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

ROFLwTIME
источник