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

193

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

Верхняя строка на всех моих страницах aspx в моем каталоге / portal / содержит это сообщение об ошибке, и я знаю, что это обычное сообщение. Я погуглил это сообщение об ошибке без конца, и я вижу много сообщений, в которых говорится, что я настраиваю папку / portal /, как приложение в IIS (которое у меня есть), и больше сообщений, говорящих мне, что я вложил web.configs (но ни одна из публикаций не предлагает руководство к решению).

Моя установка состоит в том, что у меня есть web.config в моем корневом каталоге, а затем я пытаюсь создать портал компании в каталоге / portal /. Каталог / portal / имеет свой собственный (необходимый) web.config.

Моя строка 50 файла web.config выглядит так:

    <customErrors mode="Off" defaultRedirect="customerrorpage.aspx"/>
    <anonymousIdentification enabled="true"/>
    <authentication mode="Forms"/>
    <membership defaultProvider="MyProvider">

Итак, у меня есть domain.com/web.config AND domain.com/portal/web.config ... поэтому моя страница domain.com/portal/default.aspx не будет загружаться.

Каково реальное решение этого? Нахожу ли я каким-то образом способ объединить мой корневой web.config с моим / portal / directory web.config, или я здесь далеко от базы?

Любое руководство будет с благодарностью!

Джейсон Вебер
источник
1
Если вы ожидаете, что / portal / будет отдельным приложением на вашем главном веб-сайте (что вы делаете, если добавляете туда файл web.config), вам необходимо настроить его как виртуальный каталог. Какую версию IIS вы используете? Обычно вы можете щелкнуть правой кнопкой мыши каталог и в разделе «Свойства» найти вкладку «Каталог» и нажать кнопку «Создать» рядом с именем приложения, которое, вероятно, в настоящее время неактивно. Чтобы ограничить область действия родительского файла web.config, посмотрите на атрибут attributeitInChildApplications = "false". Дайте мне знать вашу версию IIS.
тире
Привет Даш. Я использую IIS7, и / portal / должен быть каталогом сотрудников для нашей компании, где люди могут хранить документы, вести календарь и тому подобное. Я думаю, что Бенни как бы подытожил то, что вы говорили, - в своем втором варианте он обрисовал решение IIS. Я уверен, что между одним из этих двух решений, я могу понять это. Спасибо за то, что уделили мне время на прочтение этой черты и помогли мне. Как только я увижу этот вариант «создать», я буду знать, что я уже в пути! Еще раз спасибо!
Джейсон Вебер
1
У меня была эта проблема, после того как я определил профиль публикации для прекомпиляции перед публикацией. так что папка obj с web.config, которая нарушала проект, после удаления всего в папке obj снова заработала.
Румплин

Ответы:

219

Просто для справочной информации; Информация о конфигурации веб-сайта ASP.NET определяется в одном или нескольких файлах Web.config. Настройки конфигурации применяются иерархически. Существует «глобальный» файл Web.config, в котором изложена базовая информация о конфигурации для всех веб-сайтов на веб-сервере; этот файл живет в %WINDIR%\Microsoft.Net\Framework\version\CONFIGпапке. Вы также можете иметь файл Web.config в корневой папке вашего сайта. Этот файл Web.config может переопределять настройки, определенные в «глобальном» файле Web.config, или добавлять новые. Кроме того, у вас могут быть файлы Web.config во вложенных папках вашего веб-сайта, которые определяют новые параметры конфигурации или переопределяют параметры конфигурации, определенные в файлах Web.config выше в иерархии.

Некоторые элементы конфигурации в Web.config не могут быть определены за пределами уровня приложения, что означает, что они должны быть определены в «глобальном» файле Web.config или в файле Web.config в корневой папке веб-сайта. <authentication>Элемент является одним из таких примеров. Приведенное выше сообщение об ошибке указывает на наличие файла Web.config в одной из подпапок веб-сайта, который имеет один из этих элементов конфигурации, который нельзя определить за пределами уровня приложения.

Источник: http://scottonwriting.net/sowblog/archive/2010/02/17/163375.aspx

Вы правильно определили 2 возможных подхода.

1 - В зависимости от содержимого вашего второго web.config и от того, позволят ли ваши настройки (т. Е. Тот же метод аутентификации) - добавьте <authentication>настройки и любые другие элементы, которые должны быть определены глобально, в верхний web.config

2 - Если вы не можете объединить содержимое web.config, вы сможете превратить подпапку в веб-приложение в IIS, выполнив шаги, указанные в этой ссылке в архиве ниже. Исходная ссылка больше не работает. (см. архив ) Надеюсь, это поможет.

benni_mac_b
источник
8
Да, Бенни, абсолютно это помогло и прояснило ситуацию - многое изменилось. Я действительно ценю ваше время, чтобы ответить на этот вопрос; Я многому научился, просто прочитав твой ответ, и теперь все становится более понятным. Я думаю, что я собираюсь попытаться объединить два файла web.config - по крайней мере, часть аутентификации - и если это не сработает, я рассмотрю различные варианты IIS7. Еще раз спасибо за ваше время и информацию, Бенни!
Джейсон Вебер
13
Когда я создаю пакет веб-развертывания, он вызывает эту проблему при следующем сборке. У него есть копия файла Web.config в MyWebSiteProject / obj / Debug / ...
Кертис Яллоп
4
После почти дня попыток выяснить это, наконец, описательный подробный ответ, который фактически объяснил проблему, в отличие от высказывания ... просто очистите свое решение и восстановите. Спасибо за это!
Доктор Пол Джарвис
2
Я обнаружил, что самая большая проблема здесь заключалась в том, что первоначальная сборка работала, но затем последующая сборка не удалась, потому что параметры, которые были разрешены в файле web.config верхнего уровня, были недопустимы в файле web.config, который теперь был скопирован в папку obj. Хитрость заключалась в том, чтобы удалить атрибуты-нарушители на верхнем уровне и удалить папку obj, чтобы получить легальный web.config в подпапку. Очевидно, что это ошибка в Visual Studio, но обходной путь прост, если вам не нужно использовать атрибуты в web.config верхнего уровня, которые недопустимы в подуровне web.config.
csells
2
В Visual Studio 2012 и 2013, когда файл конфигурации имеет параметр Копировать в выходной каталог = Всегда копировать, процесс публикации, похоже, сбрасывает копии файла конфигурации в папки bin и obj, что затем вызывает это исключение. Решение этой проблемы публикации, определенной Тимом С., состоит в том, чтобы установить для свойства файла конфигурации значение «Не копировать».
критическое
68

Что бы это ни стоило, я получил сообщение об ошибке: «Ошибка использовать раздел, зарегистрированный как allowDefinition =« MachineToApplication »за пределами уровня приложения». и в итоге решил его, очистив каталоги \ myWebApp \ obj \ Debug и \ myWebApp \ obj \ Release. Мне также нужно было установить начальную страницу по умолчанию. Но затем приложение запустилось нормально. НТН.

Aaronius
источник
24
+1 Удаление папки OBJ, кажется, является обычным исправлением ... stackoverflow.com/a/5175074/188926
Дунк
1
Удаление содержимого папки OBJ исправило это и для меня. Кажется, есть много других потенциальных причин этой ошибки. Фраза, которая помогла мне найти правильный ответ, была «во время публикации».
Джим Нефф
1
Если бы я имел на папке OBJ, я бы попробовал это.
Б. Клэй Шеннон
Настройка страницы запуска по умолчанию сделала меня хитрее, после удаления папки Debug было недостаточно (поэтому убедитесь, что сделали оба).
LoJo
Пробовал это, и это не сработало. Затем я понял, что забыл преобразовать свои опубликованные файлы в приложение в IIS.
eaglei22
60

Как сказано выше в RY4N, проблема не обязательно в файле web.config в папке Project. В некоторых случаях я обнаружил, что запуск сборки под профилем Debug оставит детрит в папке Debug соответствующего проекта. Здесь часто присутствует файл web.config, который приводит к указанной выше ошибке, когда вы впоследствии запускаете сборку в профиле Release.

Решение, которое работает для меня здесь, состоит в том, чтобы удалить всю папку Debug, созданную предыдущими сборками в каталоге проекта.

Мэтью Браун
источник
1
Спасибо, Мэтью; Я наконец понял это некоторое время назад, но да, я должен был скомпилировать в выпуске, а не отладить. Благодарим Вас за то, что нашли время ответить!
Джейсон Вебер
3
Спасибо за чаевые! Я просто удалил папки bin и obj в своем проекте веб-сайта, и это решило проблему при перестроении.
Пол Стеглер
22

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

Хотя опция Build Views очень хороша, я отключил ее, потому что эта «ошибка» всегда появлялась и позволяла мне не запускать приложение.

Повелитель сценариев
источник
2
Спасибо, Господи ... это, похоже, помогло, вместе с несколькими другими предложениями. Спасибо, что нашли время ответить!
Джейсон Вебер
1
Это происходило и со мной. Не уверен почему. Конечно, это делает настройку «MvcBuildViews» намного менее полезной.
Кен Смит
Есть ли способ установить MvcBuildViews только для пользовательских настроек? Как в файле webproject.csproj.user?
C. Tewalt
Я начал получать эту ошибку после установки Обновления 2 для VS 2013. У меня есть проект с верхним уровнем и вложенным дочерним веб-сайтом, оба настроены как приложения IIS. Отключение MvcBuildViews решило проблему и для меня.
Грег Энслоу
13

Просто сказать

Если вы обновляете (например, 2008 -> 2010), проект Visual Studio создаст резервную копию (если вы разрешите) в решении проекта, которое будет добавлено в новое решение. Старый Webconfig - это место, из которого может возникнуть ошибка, указанная выше. ,

« Файл Web.config в одной из подпапок веб-сайта, в котором содержится один из этих элементов конфигурации, который нельзя определить за пределами уровня приложения. » @Benni_mac_b

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

RY4N
источник
Спасибо за эту информацию, Райан .... У меня только VS 2010. Я не совсем уверен, что вы имеете в виду, когда говорите об удалении папки резервного копирования из проекта и решения. Но я посмотрю дальше на ваш ответ. Еще раз, спасибо, что нашли время, чтобы попытаться помочь мне! Я только что разместил следующий вопрос здесь: stackoverflow.com/questions/10414751/…
Джейсон Вебер
12

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

У меня было более старое веб-приложение, встроенное в 2.0. Я перенес его на 4.5 решение.

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

Наконец, я обнаружил, что проблема заключалась в том, что Build Action для файла web.config был «Встроенный ресурс», а не «Содержимое». Кроме того, для параметра «Копировать в выходной каталог» было установлено «Всегда копировать», а не «Не копировать». Я не знаю, когда были сделаны эти настройки, но я верю, что это было в версии 2.0 приложения.

Изменение параметров файла web.config позволило безошибочно работать с публикацией в публикации Visual Studio 2012.

Тим С
источник
попробовал любое другое решение там. этот помог. Мой проект со временем был перенесен из Visual Studio 2010 в 2015 г., поэтому, возможно, значение «Всегда копировать» было значением по умолчанию в 2010 г.
Андреас Ратмайр,
Свойства моего web.config ограничены двумя: FileName и FullPath; в противном случае я бы проверил, что это за действие по сборке.
Б. Клэй Шеннон
11

У меня была такая же проблема в проекте MVC. Произошла ошибка при попытке публикации. Оказалось, что папка obj должна быть пустой (или, по крайней мере, не содержать web.config).

Бег Cleanне помог мне.

Я решил проблему, очистив obj папку перед сборкой (сборка проекта в любом случае не займет много времени).

Я выгрузил проект и добавил следующее в BeforeBuild Target

<Target Name="BeforeBuild">
    <Delete Files="$(SolutionDir)\$(ProjectDir)\bin\**\*.*" />
    <Delete Files="$(SolutionDir)\$(ProjectDir)\obj\**\*.*" />
    <RemoveDir Directories="$(SolutionDir)\$(ProjectDir)\bin" />
    <RemoveDir Directories="$(SolutionDir)\$(ProjectDir)\obj" />
    <Message Text="Clean obj/bin from web project" />
</Target>

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

Rik
источник
7

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

У меня была эта проблема в VS.NET. Оказалось, что когда я настраивал некоторые преобразования конфигурации, я по ошибке установил свойство файла Web.config «Копировать всегда». Я обычно устанавливаю для моих файлов преобразования значение «Копировать всегда», но оставляю корневой файл web.config как «Не копировать».

Будьте внимательны, поскольку изменение свойств web.config также изменяет все вложенные преобразования.

Итак, чтобы исправить:

1) Измените web.config на «Не копировать»

2) При желании, если вы используете конфигурационные преобразования, установите для них значение «Копировать всегда»

3) Удалите папки obj и bin из решения (они могут не отображаться, поэтому выберите узел проекта в обозревателе решений и нажмите кнопку на панели инструментов «Показать все файлы»).

4) Опубликовать

Работал на меня.

Бен
источник
5

Я столкнулся с этой ошибкой только во время публикации приложения.

Свойства файлов web.config (и преобразований) были установлены следующим образом:

  • Build Action - None
  • Copy to Output - Always,

Решением было изменить настройки на:

  • Build Action - Content
  • Copy to Output - Do not Copy
Хьюго
источник
4

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

После долгих размышлений я наткнулся на этот отчет об ошибке на веб-сайте Connect: https://connect.microsoft.com/VisualStudio/feedback/details/779737/error-allowdefinition-machinetoapplication-beyond-application-level

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

Пэт Лонг - Мунки Йиби
источник
4

Удалите и создайте виртуальный каталог снова. Щелкните правой кнопкой мыши и преобразуйте виртуальный каталог в « Приложение ».

sudhAnsu63
источник
3

Щелкните Web.configфайл в обозревателе решений, щелкните правой кнопкой мыши «Свойства» и выберите «Копировать в выходной каталог: не копировать».

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

nPcomp
источник
1

Для меня причина была в том, что папка obj находилась в папке веб-сайта, и после создания различных конфигураций появилось несколько файлов web.config. Я решил проблему под vs2012, переместив папку obj с веб-сайта. Для этого я добавил вручную (в блокноте) $ (SolutionDir) \ Obj \ $ (Configuration) к каждой конфигурации в файле проекта веб-сайта.

Mikhail.Gorbulsky
источник
1

У меня была такая же проблема, когда я публиковал сайт, если я строю сайт, у меня не возникает проблем, но при публикации я получаю эту ужасную ошибку:

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

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

Надеюсь, это кому-нибудь поможет !!

FabianVal
источник
1

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

Мартин Запах
источник
1

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

от vs: Build> Чистое решение

затем восстановить.

kennydust
источник
1

Пуск в Windows -> открыть Сайты -> IIS -> щелкните правой кнопкой мыши по своему сайту -> Управление веб-сайтом -> Расширенные настройки -> выберите Физический путь -> попробуйте выбрать подпапку, которая выбрана в данный момент.

логика заключается в том, что файл веб-конфигурации внутри подпапки пытается внести изменения, и это запрещено, это должна быть выбранная папка: http://scottonwriting.net/sowblog/archive/2010/02/17/163375.aspx

Субодх Прадхан
источник
1

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

Решение:

  1. Вы должны удалить некоторые вкладки конфигурации, такие как: профиль , членство , roleManager , sessionState в sub web.config
  2. Измените Аутентификацию на Нет как: <authentication mode="None" />
  3. И перейдите в IIS, щелкните правой кнопкой мыши подпапку - > Добавить приложение.
  4. Сброс IIS для решения этой проблемы.

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

Чунг
источник
1

Я получил эту ошибку на localhost в Visual Studio 2017, и простой перезапуск Visual Studio устранил проблему.

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

Джош Харрис
источник
0

Убедитесь, что вы не попали в ловушку неправильного доступа к вашему локальному сайту через localchost / mysite.test, который должен быть mysite.test, который выдаст вам эту ошибку.

Когда вы заходите на свой сайт как localhost / dir_name, в этом случае ваш web.conf падает ниже корневого уровня и, следовательно, эта ошибка.

Хаммад хан
источник
0

Я выполнял миграцию приложений, и в нем было несколько приложений (несколько web.configs) ... я просто зашел в IIS, затем щелкнул правой кнопкой мыши на подпапках, затем "Преобразовать в приложение", и это сработало.

sojim2
источник
0

Я получил эту ошибку иначе, чем все остальные:

Я перешел с vs2010 с проектом веб-развертывания на vs2012 и новый профиль веб-публикации.

Я создал новый проект веб-публикации в vs2012 для публикации в файловой системе (у нас есть отдельный сборщик инсталляторов, это коммерческое приложение), и я публиковал в папке, которая была в существующем веб-проекте, который связан с IIS.

Это вызвало ошибку во время публикации, которая сначала озадачила меня, потому что я публиковал в файловой системе, а не в IIS (я думал).

Решением было изменить публикацию в папке за пределами веб-проекта.

JohnC
источник
0

Это было нормально, localhostно когда я опубликовал релиз на сервере, я запустил ту же ошибку для нескольких страниц. Затем я очистил решение и перестроил и опубликовал, все было исправлено.

Бакер Накви
источник
0

Иногда простой ответ является лучшим. У меня было два файла web.config в моем проекте. На основном уровне я должен был внести изменения, чтобы справиться с моим тайм-аутом сеанса (который вызвал эту проблему). У меня был отдельный файл конфигурации в моей директории Razor Views, в котором были настройки для Razor и его представлений. Я добавил там раздел (не на уровне приложения!). Не осознавая, что у меня есть два отдельных файла web.config, я попробовал все, кроме поиска очевидного.

Гай Шалнат
источник
0

моей ошибкой было случайное копирование при вставке файла web.config в другую папку на веб-сервере

krilovich
источник
0

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

eaglei22
источник