Помилка використання розділу, зареєстрованого як enableDefinition = 'MachineToApplication' поза рівнем програми


193

Помилка використання розділу, зареєстрованого як enableDefinition = 'MachineToApplication' за межами рівня програми.

У верхньому рядку всіх моїх сторінок aspx в моєму / порталі / каталогу є повідомлення про помилку, і я знаю, що це звичайне. Це повідомлення про помилку я переглянув до кінця, і я бачу багато повідомлень, які мені дозволяють налаштувати / портал / папку як додаток в IIS (який у мене є), і більше публікацій, які говорять мені, що я вклав web.configs (але жодна з публікацій не пропонує вказівки щодо рішення).

Моя настройка полягає в тому, що у мене в кореневому каталозі є web.config, а потім я намагаюся зробити портал компанії в / порталі / каталозі. / Портал / каталог має власну (необхідну) web.config.

Мій рядок web.config 50 такий:

    <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 з моїм / порталом / каталогом web.config, чи я тут відхиляюсь від бази?

Будь-які вказівки будуть дуже вдячні!


1
Якщо ви очікуєте, що / портал / буде окремим додатком на вашому головному веб-сайті (який ви є, якщо ви запускаєте туди web.config), тоді вам потрібно встановити його як віртуальний каталог. Яку версію IIS ви використовуєте? Зазвичай ви можете клацнути правою кнопкою миші на каталозі та в розділі "Властивості" шукати вкладку "Каталог" та натиснути кнопку "Створити" поруч із назвою програми, яка, ймовірно, наразі затьмарена сірим кольором. Щоб обмежити область батьківського файлу web.config, подивіться атрибут nasleditInChildApplications = "false". Дайте мені знати вашу версію IIS.
тире

Привіт Даш. Я використовую IIS7, і / портал / просто повинен бути каталогом службовців для нашої компанії, де люди можуть зберігати документи, вести календар тощо. Я думаю, що Бенні свого роду підсумував те, що ти казав - у своєму другому варіанті він окреслив рішення ІСУ. Я впевнений, що між одним із цих двох рішень я можу це зрозуміти. Дякуємо за ваш час, читаючи цю тире, і допомагаєте мені. Як тільки я побачу цей варіант "створити", я знаю, що я на шляху! Знову дякую!
Джейсон Вебер

1
У мене виникла ця проблема після того, як я визначив профіль публікації для попереднього компіляції перед публікацією. тому папка obj має веб-конфіг, який порушував проект, після видалення всього в папці 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, виконуючи кроки, що містяться у цьому архіві за посиланням нижче. Початкове посилання більше не працює. (див. в архіві ) Сподіваюся, що це допомагає.


8
Так, Бенні, абсолютно це допомогло та очистило речі - багато чого. Я щиро ціную ваш час, відповідаючи на це питання; Я навчився тон, лише прочитавши вашу відповідь, і тепер справи мають трохи більше сенсу. Я думаю, що я спробую об'єднати два файли web.config - принаймні частина аутентифікації - і якщо це не спрацює, я вивчу різні варіанти IIS7. Ще раз дякую за ваш час та інформацію, Бенні!
Джейсон Вебер

13
Коли я будую пакет веб-розгортання, це викликає цю проблему наступного разу, коли я будую. Він має копію Web.config в MyWebSiteProject / obj / Debug / ...
Curtis Yallop

4
Після майже доби спроб розібратися в цьому, нарешті, описовий поглиблений відповідь, який фактично пояснив проблему, на відміну від того, щоб сказати ... просто очистіть рішення та відновлюйте його. Дякую за це!
Доктор Пол Джарвіс

2
Найбільшою проблемою у мене було те, що початкова збірка спрацювала, але потім наступна збірка не вдалася, оскільки налаштування, дозволені у веб-вищому рівні web.config, були неправомірними у веб-конфігу, який тепер був скопійований у папку obj. Трюк полягав у тому, щоб видалити атрибути, що порушують право на верхньому рівні, та видалити папку obj, щоб отримати законну web.config у підпапку. Очевидно, що це помилка в Visual Studio, але обробка є прямолінійною, якщо вам не потрібно використовувати атрибути верхнього рівня web.config, які є незаконними в підрівні web.config.
csells

2
У Visual Studio 2012 та 2013, коли у конфігураційному файлі є Copy to Output Directory = Always Copy, процес публікації, здається, видаляє копії файлу config у папки bin та obj, що запускає цей виняток. Рішення цієї проблеми Publish, визначене Тімом С., полягає у встановленні властивості файлу конфігурації на "Не копіювати".
критичне

68

Щодо того, що мені варто, я отримав помилку: "Помилка використання розділу, зареєстрованого як enableDefinition = 'MachineToApplication" за межами рівня програми. " і врешті вирішив це, очистивши каталоги \ myWebApp \ obj \ Налагодження та \ myWebApp \ obj \ Випустити каталоги. Мені також потрібно було встановити сторінку запуску за замовчуванням. Але потім додаток тоді запустився чудово. HTH.


24
Видалення папки OBJ здається звичайним виправленням ... stackoverflow.com/a/5175074/188926
Dunc

1
Видалення вмісту папки OBJ зафіксувало це і для мене. Здається, існує маса інших потенційних причин цієї помилки. Фраза, яка допомогла мені знайти правильну відповідь, була "під час публікації".
Джим Нефф

1
Якби я мав папку OBJ, я б спробував це.
Б. Клей Шеннон

Встановлення сторінки запуску за замовчуванням для мене зробило хитрість після видалення папки «Налагодження» було недостатньо (тому обов'язково виконайте обидва).
LoJo

Спробував це, і не вийшло. Тоді я зрозумів, що забув перетворити свої опубліковані файли в програму в IIS.
eaglei22

60

Як зазначено вище RY4N, не обов’язково проблема веб -config у вашій папці Project викликає проблему. У деяких випадках я виявив, що запуск збірки під профілем налагодження залишить детрит у папці Налагодження під відповідним проектом. Тут часто є файл web.config, який призводить до помилки вище, коли ви згодом запускаєте збірку під профілем випуску.

Тут для мене працює рішення - видалити всю папку налагодження, яку створили попередні збірки, створені в каталозі проекту.


1
Дякую Метью; Нарешті я це зрозумів деякий час тому, але так, мені довелося збирати у випуску, а не налагоджувати. Дякую, що знайшли час для відповіді!
Джейсон Вебер

3
Дякую за пораду! Я просто видалив папки bin та obj у своєму проекті веб-сайту, і це вирішило проблему, коли я відбудувався.
Пол Стеглер

22

Це також відбувалося на моєму домашньому комп’ютері, але ТІЛЬКИ, коли я ввімкнув Build Views в конфігурації випуску І створив конфігурацію Release. Інакше цього не сталося.

Хоча параметр Build Views дуже приємний, я його вимкнув, тому що ця "помилка" завжди з'явиться, і я не можу запустити додаток.


2
Дякую Тобі, Господи ... що, здавалося, зробило трюк разом із ще кількома пропозиціями. Я вдячний, що ви знайшли час, щоб відповісти!
Джейсон Вебер

1
Це сталося і зі мною. Не знаю чому. Це впевнено, бо чорт робить налаштування "MvcBuildViews" цілком багато корисним.
Кен Сміт

Чи можна встановити MvcBuildViews лише для налаштувань користувача? Як у файлі webproject.csproj.user?
C. Tewalt

Я почав отримувати цю помилку після встановлення оновлення 2 для VS 2013. У мене є проект, який має верхній рівень та вкладений дочірній веб-сайт, обидва налаштовані як програми IIS. Відключення MvcBuildViews вирішило проблему і для мене.
Грег Енслоу

13

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

Якщо ви оновите (наприклад, 2008 -> 2010), проект Visual studio створить резервну копію (якщо ви це дозволите) в проектному рішенні, яке додається до нового рішення, стара веб-конфігурація - це те, де помилка, зазначена вище, може виникнути з .

" Файл Web.config в одній з підпапок веб-сайту, ніж один з цих елементів конфігурації, який неможливо визначити за межами рівня програми. " @Benni_mac_b

Щоб виправити це: Просто видаліть папку резервного копіювання з проекту та рішення в цьому сценарії.


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

12

Я придумав ще одну можливу причину того, що це відбувається.

У мене був старший веб-додаток, вбудований в 2.0. Я переніс це на 4,5 рішення.

Додаток створено та налагоджено налагоджено, коли всередині Visual Studio, але тоді, коли я намагався опублікувати веб-додаток, ця помилка виникала знову і знову.

Нарешті я виявив проблему в тому, що Build Action для файлу web.config був "Вбудований ресурс", а не "Вміст". Крім того, для каталогу "Копіювати на вихід" було встановлено значення "Завжди копіювати", а не "Не копіювати". Я не знаю, коли були зроблені ці налаштування, але я вважаю, що це було ще у версії 2.0.

Змінення налаштувань для файлу web.config дозволило дії Publish у публікації Visual Studio 2012 бездоганно працювати.


намагався будь-яке інше рішення там. цей допоміг. Мій проект був переміщений з часом із Visual Studio 2010 на 2015 рік, тому, можливо, "Завжди копіювати" було значенням за замовчуванням у 2010 році
Andreas Rathmayr

Властивості мого web.config обмежені двома: FileName та FullPath; інакше я би перевірив, що це за дія збірки.
Б. Клей Шеннон

11

У мене була така ж проблема в проекті MVC. Помилка сталася під час спроби публікації. Виявилося, що папка obj повинна бути порожньою (або принаймні не містити жодної web.config).

Біг Cleanне зробив для мене хитрість.

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

Я розвантажив проект і додав наступне до цілі BeforeBuild

<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>

Сподіваюся, це допомагає


7

"Помилка використання розділу, зареєстрованого як enableDefinition = '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

Видаліть і створіть віртуальний Каталог знову. Клацніть правою кнопкою миші та перетворіть віртуальний каталог у " додаток "


3

Клацніть на Web.configфайлі від Solution Explorer і натисніть правою кнопкою миші "Властивості" та перейдіть до "Копіювати у каталог виводу: Не копіюйте".

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


1

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


1

У мене виникло те саме питання, коли я публікую сайт, якщо я будую сайт, у мене не виникає проблем, але під час публікації я отримаю цю жахливу помилку:

"Помилка використання розділу, зареєстрованого як enableDefinition = 'MachineToApplication' за межами рівня програми. Ця помилка може бути викликана тим, що віртуальний каталог не конфігурується як програма в IIS"

Я спробував усе, що було сказано тут, у цій публікації, нічим не вдаючись, те, що для мене спрацювало, - це просто створити новий профіль публікації, точно такий же, як той, який я використовував, і який працює добре, не помиляйтеся з новим профілем, але робити зі старим. Не знаю, в чому різниця, але принаймні я можу опублікувати свій проект MVC.

Сподіваюся, це допомагає комусь !!


1

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


1

У мене виникло це питання, і воно було вирішено, очистивши своє рішення від старих збірок тощо.

від vs: збірка> чисте рішення

потім відновити.


1

Запуск Windows -> відкрити сайти -> IIS -> клацнути правою кнопкою миші ваш сайт -> керувати веб-сайтом -> заздалегідь встановити -> переглядати фізичний шлях -> спробувати вибрати підпапку, коли ви вибираєте в даний момент.

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


1

Я також отримую цю помилку, коли намагаюся розгорнути підрозділ на веб-сайті.

Рішення таке:

  1. Ви повинні видалити деякі вкладки конфігурації, такі як: профіль , членство , roleManager , sessionState у підрозділі 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, а потім клацнути правою кнопкою миші на підпапках, а потім "Перетворити в додаток", і це спрацювало.


0

Я отримав цю помилку інакше, ніж усі:

Я переходив з vs2010 з проектом веб-розгортання на vs2012 та новим профілем веб-публікації.

Я створив новий проект публікації веб-сайтів у vs2012, щоб опублікувати у файловій системі (у нас є окремий інсталятор, це комерційний додаток), і я публікував папку, що знаходилась всередині існуючого веб-проекту, який пов'язаний з IIS.

Це спричинило помилку під час публікації, яка спочатку мене містифікувала, оскільки я публікував у файловій системі, а не IIS (я думав).

Рішенням було змінити публікацію в папку поза межами веб-проекту.


0

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


0

Іноді найкраща проста відповідь. У мене було два файли web.config у моєму проекті. Основний рівень - це те, де мені потрібно було внести зміни, щоб вирішити питання про час очікування сеансу (що викликало цю проблему). У моєму каталозі представлень Razor у мене був окремий конфігураційний файл, у якому були налаштовані Razor та його представлення. Я додавав там розділ (не на рівні програми!). Не розуміючи, що у мене є два окремі файли web.config, я спробував усе, крім пошуку очевидного.


0

моя помилка - випадково скопіювати вставлення web.config всередину іншої папки на веб-сервері


0

Я отримав цю помилку, коли забув перетворити опублікований проект у програму в IIS.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.