Błąd korzystania z sekcji zarejestrowanej jako allowDefinition = 'MachineToApplication' poza poziomem aplikacji

193

Błędem jest użycie sekcji zarejestrowanej jako allowDefinition = 'MachineToApplication' poza poziomem aplikacji.

Górny wiersz na wszystkich moich stronach aspx w moim katalogu / portal / zawiera ten komunikat o błędzie i wiem, że jest to typowy komunikat. Pooglądałem ten komunikat o błędzie bez końca i widzę wiele postów mówiących mi, aby skonfigurować folder / portal / jako aplikację w IIS (które mam), i więcej postów mówiących, że zagnieździłem web.configs (ale żaden z postów nie zawiera wskazówek dotyczących rozwiązania).

Moja konfiguracja polega na tym, że mam plik web.config w katalogu głównym, a następnie próbuję utworzyć portal firmowy w katalogu / portal /. Katalog / portal / ma swój (konieczny) plik web.config.

Mój wiersz 50 web.config wygląda następująco:

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

Mam więc domenę.com/web.config ORAZ domenę.com/portal/web.config ... więc moja strona domena.com/portal/default.aspx nie zostanie załadowana.

Jakie jest na to prawdziwe rozwiązanie? Czy znajdę sposób na połączenie mojego katalogu głównego web.config z moim / portal / directory web.config, czy też jestem tutaj daleko od bazy?

Wszelkie wskazówki będą mile widziane!

Jason Weber
źródło
1
Jeśli spodziewasz się, że / portal / będzie osobną aplikacją na głównej stronie internetowej (jeśli tak, jeśli upuszczasz tam plik web.config), musisz skonfigurować go jako katalog wirtualny. Z jakiej wersji IIS korzystasz? Zazwyczaj możesz kliknąć katalog prawym przyciskiem myszy, a następnie w obszarze Właściwości poszukać karty „Katalog” i nacisnąć przycisk „Utwórz” obok nazwy aplikacji, która prawdopodobnie jest obecnie wyszarzona. Aby ograniczyć zakres nadrzędnego pliku web.config, spójrz na atrybut inheritInChildApplications = „false”. Daj mi znać swoją wersję IIS.
kreska
Cześć Dash. Używam IIS7, a / portal / ma być katalogiem pracowników dla naszej firmy, w którym ludzie mogą przechowywać dokumenty, prowadzić kalendarz i tym podobne. Myślę, że Benni podsumował to, co mówiłeś - w swojej drugiej opcji przedstawił rozwiązanie IIS. Jestem pewien, że między jednym z tych dwóch rozwiązań mogę to rozgryźć. Dziękujemy za poświęcony czas na przeczytanie tego Dasha i pomoc. Gdy zobaczę opcję „utwórz”, będę wiedział, że jestem w drodze! Dzięki jeszcze raz!
Jason Weber,
1
Miałem ten problem po tym, jak zdefiniowałem profil publikowania do prekompilacji przed publikacją. więc folder obj ma plik web.config, który psuje projekt, po usunięciu wszystkiego w folderze obj, działa ponownie.
Rumplin,

Odpowiedzi:

219

Tylko dla informacji w tle; Informacje o konfiguracji witryny sieci Web ASP.NET są zdefiniowane w co najmniej jednym pliku Web.config. Ustawienia konfiguracji są stosowane w sposób hierarchiczny. Istnieje „globalny” plik Web.config, który określa podstawowe informacje o konfiguracji dla wszystkich stron internetowych na serwerze WWW; ten plik mieszka w%WINDIR%\Microsoft.Net\Framework\version\CONFIG folderze. Możesz także mieć plik Web.config w folderze głównym swojej witryny. Ten plik Web.config może zastąpić ustawienia zdefiniowane w „globalnym” pliku Web.config lub dodać nowe. Ponadto w podfolderach witryny mogą znajdować się pliki Web.config, które definiują nowe ustawienia konfiguracji lub zastępują ustawienia konfiguracji zdefiniowane w plikach Web.config znajdujących się wyżej w hierarchii.

Niektórych elementów konfiguracyjnych w Web.config nie można zdefiniować poza poziomem aplikacji, co oznacza, że ​​muszą być zdefiniowane w „globalnym” pliku Web.config lub w pliku Web.config w folderze głównym witryny. <authentication>Elementów jest jednym z przykładów. Powyższy komunikat o błędzie wskazuje, że w jednym z podfolderów serwisu znajduje się plik Web.config, który zawiera jeden z tych elementów konfiguracji, których nie można zdefiniować poza poziomem aplikacji.

Źródło: http://scottonwriting.net/sowblog/archive/2010/02/17/163375.aspx

Prawidłowo zidentyfikowałeś 2 możliwe podejścia.

1 - W zależności od zawartości drugiego pliku web.config i jeśli Twoja konfiguracja pozwoli (tj. Ta sama metoda uwierzytelniania) - dodaj <authentication>ustawienia i wszelkie inne elementy, które powinny być zdefiniowane globalnie, w górnym pliku web.config

2 - Jeśli nie możesz scalić zawartości web.config, powinieneś być w stanie przekształcić podfolder w aplikację internetową w IIS, wykonując kroki zawarte w linku zarchiwizowanym poniżej. Oryginalny link już nie działa. (patrz zarchiwizowane ) Mam nadzieję, że to pomaga.

benni_mac_b
źródło
8
Tak, Benni, absolutnie to pomogło i wszystko wyjaśniło - wiele spraw. Naprawdę doceniam twój czas na udzielenie odpowiedzi na to pytanie; Nauczyłem się tony po prostu czytając twoją odpowiedź, a teraz sprawy nabierają trochę więcej sensu. Myślę, że spróbuję scalić dwa pliki web.config - przynajmniej część uwierzytelniającą - a jeśli to nie zadziała, przejrzę różne opcje IIS7. Jeszcze raz dziękuję za poświęcony czas i informacje, Benni!
Jason Weber,
13
Kiedy buduję pakiet do wdrażania sieci, powoduje to ten problem przy następnej kompilacji. Ma kopię pliku Web.config w MyWebSiteProject / obj / Debug / ...
Curtis Yallop
4
Po prawie dniu próbowania tego, w końcu opisowa szczegółowa odpowiedź, która faktycznie wyjaśniła problem, w przeciwieństwie do powiedzenia ... po prostu wyczyść swoje rozwiązanie i przebuduj. Dzięki za to!
Dr Paul Jarvis,
2
Odkryłem, że największym problemem było to, że początkowa kompilacja działała, ale potem następna kompilacja nie powiodła się, ponieważ ustawienia dozwolone w pliku web.config najwyższego poziomu były nieprawidłowe w pliku web.config, który został teraz skopiowany do folderu obj. Sztuką było usunięcie szkodliwych atrybutów z najwyższego poziomu i usunięcie folderu obj, aby uzyskać legalny plik web.config w podfolderze. Oczywiście jest to błąd w programie Visual Studio, ale obejście tego jest proste, jeśli nie trzeba używać atrybutów w pliku web.config najwyższego poziomu, które są nielegalne w pliku web.config niższego poziomu.
sprzedaje
2
W programie Visual Studio 2012 i 2013, gdy plik konfiguracyjny ma opcję Kopiuj do katalogu wyjściowego = Zawsze kopiuj, proces publikowania wydaje się upuszczać kopie pliku konfiguracyjnego do folderów bin i obj, co następnie wyzwala ten wyjątek. Rozwiązaniem tego problemu publikowania, zidentyfikowanego przez Tima C., jest ustawienie właściwości pliku konfiguracyjnego na Nie kopiuj.
Krytyczna
68

Za to, co jest tego warte, otrzymałem błąd: „Błędem jest użycie sekcji zarejestrowanej jako allowDefinition = 'MachineToApplication' poza poziomem aplikacji.” i ostatecznie rozwiązało to przez wyczyszczenie katalogów \ myWebApp \ obj \ Debug i \ myWebApp \ obj \ Release. Musiałem także ustawić domyślną stronę startową. Ale potem aplikacja zaczęła działać poprawnie. HTH.

Aaroniusz
źródło
24
+1 Usuwanie folderu OBJ wydaje się być częstą poprawką ... stackoverflow.com/a/5175074/188926
Dunc
1
Usunięcie zawartości folderu OBJ naprawiło to również dla mnie. Wydaje się, że istnieje wiele innych potencjalnych przyczyn tego błędu. Fraza, która pomogła mi znaleźć właściwą odpowiedź, brzmiała „podczas publikacji”.
Jim Neff
1
Gdybym miał folder OBJ, spróbowałbym tego.
B. Clay Shannon,
Ustawienie domyślnej strony startowej załatwiło sprawę po usunięciu folderu debugowania nie było wystarczające (więc upewnij się, że zrobisz oba).
LoJo,
Próbowałem tego i to nie działało. Potem zdałem sobie sprawę, że zapomniałem przekonwertować swoje opublikowane pliki do aplikacji w IIS.
eaglei22
60

Jak mówi RY4N powyżej, problem niekoniecznie musi być web.config w folderze Project. W niektórych przypadkach stwierdziłem, że uruchomienie kompilacji w profilu Debugowania pozostawi po sobie detrytus w folderze Debug w danym projekcie. Często znajduje się tutaj plik web.config, który prowadzi do błędu powyżej, gdy następnie uruchamiasz kompilację w profilu Release.

Rozwiązaniem, które tu działa, jest usunięcie całego folderu debugowania utworzonego przez poprzednią kompilację w katalogu projektu.

Matthew Brown
źródło
1
Dziękuję Matthew; W końcu doszedłem do tego jakiś czas temu, ale tak, musiałem skompilować wydanie, a nie debugować. Dziękujemy za poświęcenie czasu na odpowiedź!
Jason Weber
3
Dzięki za wskazówkę! Właśnie usunąłem foldery bin i obj w moim projekcie witryny i rozwiązało to problem po przebudowie.
Paul Stegler,
22

Działo się to również na moim komputerze domowym, ale TYLKO, kiedy włączyłem opcję Kompiluj widoki w konfiguracji wersji ORAZ zbudowałem konfigurację wersji. W przeciwnym razie tak się nie stanie.

Chociaż opcja Kompiluj widoki jest bardzo przyjemna, ostatecznie ją wyłączyłem, ponieważ ten „błąd” zawsze się pojawiał i uniemożliwiał mi uruchomienie aplikacji.

Lord of Scripts
źródło
2
Dziękuję Ci, Panie ... to załatwiło sprawę, wraz z kilkoma innymi sugestiami. Doceniam, że nie spieszysz się z odpowiedzią!
Jason Weber
1
To samo mi się przydarzyło. Nie pewny dlaczego. To na pewno, jak do cholery, sprawia, że ​​ustawienie „MvcBuildViews” jest o wiele mniej przydatne.
Ken Smith
Czy istnieje sposób, aby MvcBuildViews ustawiać tylko dla ustawień użytkownika? Lubisz w pliku webproject.csproj.user?
C. Tewalt,
Ten błąd zacząłem otrzymywać po zainstalowaniu aktualizacji 2 dla VS 2013. Mam projekt, który ma najwyższy poziom i zagnieżdżoną podrzędną witrynę internetową, obie są skonfigurowane jako aplikacje IIS. Wyłączenie MvcBuildViews również rozwiązało problem.
Greg Enslow,
13

Po prostu powiedzieć

Jeśli uaktualnisz (np. 2008 -> 2010) projekt Visual Studio utworzy kopię zapasową (jeśli pozwolisz) w rozwiązaniu projektu dodanym do nowego rozwiązania, w starym Webconfig możesz wskazać błąd wskazany powyżej .

Plik Web.config w jednym z podfolderów witryny zawiera jeden z tych elementów konfiguracji, których nie można zdefiniować poza poziomem aplikacji. ” @Benni_mac_b

Aby to naprawić: w tym scenariuszu wystarczy usunąć folder kopii zapasowej z projektu i rozwiązania.

RY4N
źródło
Dziękuję za te informacje, Ryan .... Mam tylko VS 2010. Nie jestem do końca pewien, co masz na myśli mówiąc, że usuń folder kopii zapasowej z projektu i rozwiązania. Ale przyjrzę się bliżej twojej odpowiedzi. Jeszcze raz dziękuję za poświęcenie czasu na próbę pomocy! Właśnie opublikowałem pytanie uzupełniające tutaj: stackoverflow.com/questions/10414751/…
Jason Weber
12

Wymyśliłem inny możliwy powód, dla którego tak się dzieje.

Miałem starszą aplikację internetową wbudowaną w 2.0. Przeprowadziłem migrację do rozwiązania 4.5.

Aplikacja została poprawnie zbudowana i debugowana w programie Visual Studio, ale gdy próbowałem opublikować aplikację internetową, ten błąd występował wielokrotnie.

W końcu odkryłem, że problemem jest to, że kompilacja działania dla pliku web.config to „Zasób osadzony” zamiast „Treść”. Ponadto dla opcji Kopiuj do katalogu wyjściowego ustawiono opcję „Zawsze kopiuj” zamiast „Nie kopiuj”. Nie wiem, kiedy te ustawienia zostały wprowadzone, ale sądzę, że wrócił do wersji 2.0 aplikacji.

Zmodyfikowanie ustawień pliku web.config pozwoliło na bezproblemowe działanie Publikuj w publikacji Visual Studio 2012.

Tim C.
źródło
wypróbowałem każde inne rozwiązanie. ten pomógł. Mój projekt został z czasem migrowany z Visual Studio 2010 do 2015, więc może „Zawsze kopiuj” było wartością domyślną w 2010 r.
Andreas Rathmayr
Właściwości mojego pliku web.config są ograniczone do dwóch: FileName i FullPath; w przeciwnym razie sprawdziłbym, jaka to była akcja kompilacji.
B. Clay Shannon,
11

Miałem ten sam problem w projekcie MVC. Błąd wystąpił, gdy próbowałem opublikować. Okazało się, że folder obj powinien być pusty (a przynajmniej nie zawierać żadnych web.config).

Bieganie Cleanmi nie pomogło.

Rozwiązałem problem, czyszcząc obj folder przed każdą kompilacją (w moim przypadku i tak budowa projektu nie potrwa tak długo).

Rozładowałem projekt i dodałem następujące elementy do obiektu 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>

Mam nadzieję że to pomoże

Rik
źródło
7

„Błędem jest użycie sekcji zarejestrowanej jako allowDefinition = 'MachineToApplication' poza poziomem aplikacji. Ten błąd może być spowodowany brakiem konfiguracji katalogu wirtualnego jako aplikacji w IIS.”

Miałem ten problem w VS.NET. Okazało się, że kiedy konfigurowałem niektóre transformacje konfiguracji, przez pomyłkę ustawiłem właściwość pliku Web.config „Kopiuj zawsze”. Zwykle ustawiam pliki transformacji na „Zawsze kopiuj”, ale zostawiam plik główny web.config jako „Nie kopiuj”.

Uważaj, ponieważ zmiana właściwości pliku web.config zmienia również wszystkie zagnieżdżone transformacje.

Aby naprawić:

1) Zmień web.config na „Nie kopiuj”

2) Opcjonalnie, jeśli używasz transformacji konfiguracji, ustaw je na „Zawsze kopiuj”

3) Usuń foldery obj i bin z rozwiązania (mogą być niewidoczne, więc wybierz węzeł projektu w Eksploratorze rozwiązań i kliknij przycisk paska narzędzi „Pokaż wszystkie pliki”.

4) Opublikuj

Pracował dla mnie.

ben
źródło
5

Ten błąd wystąpił tylko podczas publikowania aplikacji.

Właściwości plików web.config (i transformacji) zostały ustawione jako:

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

Rozwiązaniem była zmiana ustawień na:

  • Build Action - Content
  • Copy to Output - Do not Copy
Hugo
źródło
4

Miałem również ten problem, który pojawił się po tym, jak użyłem Kreatora publikacji do opublikowania mojej witryny w Internecie.

Po wielu kopaniach natknąłem się na ten raport o błędach na stronie Connect, https://connect.microsoft.com/VisualStudio/feedback/details/779737/error-allowdefinition-machinetoapplication-beyond-application-level

Odpowiedzi MS odpowiedziały, a także wyjaśniając, dlaczego był to problem, który pojawił się podczas publikowania, zawiera również tymczasowe obejście, które rozwiązało problem dla mnie.

Pat Long - Munkii Yebee
źródło
4

Usuń i ponownie utwórz katalog wirtualny. Kliknij prawym przyciskiem myszy i przekonwertuj katalog wirtualny do „ aplikacji

sudhAnsu63
źródło
3

Kliknij Web.configplik w Eksploratorze rozwiązań i kliknij prawym przyciskiem myszy „Właściwości” i zmień na „Kopiuj do katalogu wyjściowego: Nie kopiuj”.

wprowadź opis zdjęcia tutaj

nPcomp
źródło
1

Dla mnie powodem było to, że folder obj znajdował się pod folderem strony internetowej, a po zbudowaniu różnych konfiguracji pojawiło się wiele plików web.config. Rozwiązałem problem w wersji vs2012, przenosząc folder obj na stronę internetową. Aby to zrobić, dodałem ręcznie (w notatniku) $ (SolutionDir) \ Obj \ $ (Konfiguracja) do każdej konfiguracji w pliku projektu strony internetowej.

Michaił Gorbulskij
źródło
1

Miałem ten sam problem, kiedy publikowałem witrynę, jeśli ją utworzę, nie mam problemów, ale podczas publikowania pojawia się ten okropny błąd:

„Błędem jest użycie sekcji zarejestrowanej jako allowDefinition = 'MachineToApplication' poza poziomem aplikacji. Ten błąd może być spowodowany brakiem konfiguracji katalogu wirtualnego jako aplikacji w IIS”

Próbowałem wszystkiego, co zostało tu powiedziane w tym poście, nie ma ucieczki, to, co działało dla mnie, to po prostu utworzyć nowy profil publikowania z dokładnie takim samym, jak ten, którego używam i który działa dobrze, nie otrzymuj błędu z nowym profilem, ale ze starym. Nie jestem pewien, jaka jest różnica, ale przynajmniej mogę opublikować mój projekt MVC.

Mam nadzieję, że to komuś pomoże !!

FabianVal
źródło
1

Oto kolejny powód - jeśli skopiujesz całą aplikację internetową do jednego z własnych podfolderów, pojawi się ten błąd. Udało mi się to zrobić na starej stronie podczas kopiowania z jednej maszyny na drugą - zostałem poproszony o obejrzenie witryny po około 2 latach i wystąpił błąd. Trochę się zastanowiłem - ponieważ nie miałem wielu plików konfiguracyjnych.

Martin Smellworse
źródło
1

Miałem ten problem i rozwiązałem go, czyszcząc moje rozwiązanie starych zespołów itp.

od vs: Kompilacja> Czyste rozwiązanie

następnie Odbuduj.

kennydust
źródło
1

System Windows start -> otwórz Witryny -> IIS -> kliknij prawym przyciskiem myszy swoją witrynę -> Zarządzaj witryną -> Ustawienia zaawansowane -> przeglądaj Ścieżkę fizyczną -> spróbuj wybrać podfolder aktualnie wybranego miejsca.

logika jest taka, że ​​plik konfiguracyjny sieci Web w podfolderze próbuje wprowadzić zmiany, co nie jest dozwolone, musi to być wybrany folder: http://scottonwriting.net/sowblog/archive/2010/02/17/163375.aspx

Subodh Pradhan
źródło
1

Ten błąd pojawia się również, gdy próbuję wdrożyć podstronę w witrynie.

Rozwiązaniem jest:

  1. Musisz usunąć niektóre karty konfiguracji, takie jak: profil , członkostwo , roleManager , sessionState w podrzędnym pliku web.config
  2. Zmień Uwierzytelnianie na Brak jako: <authentication mode="None" />
  3. I przejdź do IIS, kliknij prawym przyciskiem myszy podfolder - > Dodaj aplikację.
  4. Zresetuj usługi IIS, aby rozwiązać ten problem.

JEŚLI dostanę inny problem, nie wahaj się pingować, może znajdę pomoc.

Trung
źródło
1

Otrzymałem ten błąd na localhost w Visual Studio 2017, a proste ponowne uruchomienie Visual Studio rozwiązało problem.

Zdaję sobie sprawę, że ten problem może być również spowodowany posiadaniem więcej niż jednego pliku web.config; na przykład jeden w podfolderze. jeśli masz wiele plików web.config celowo dla innej aplikacji: upewnij się, że katalog nie jest postrzegany jako katalog wirtualny.

Josh Harris
źródło
0

Upewnij się, że nie wpadniesz w pułapkę niewłaściwego dostępu do strony lokalnej za pośrednictwem localchost / mysite.test, który powinien być mysite.test, który da ci ten błąd.

Gdy uzyskujesz dostęp do swojej witryny, takiej jak localhost / nazwa_katalogu, w tym przypadku twoja strona web.conf spada poniżej poziomu roota i stąd ten błąd.

Hammad Khan
źródło
0

Migrowałem aplikacje, a aplikacja zawierała wiele aplikacji (wiele web.configs). To, co zrobiłem, to przejście do IIS, następnie kliknięcie podfolderów prawym przyciskiem myszy, a następnie „Konwertuj na aplikację” i zadziałało.

sojim2
źródło
0

Wystąpił ten błąd inaczej niż wszyscy inni:

Migrowałem z vs2010 z projektem wdrożenia internetowego do vs2012 i nowego profilu publikowania w Internecie.

W vs2012 utworzyłem nowy projekt publikowania w Internecie, aby publikować w systemie plików (mamy osobnego konstruktora instalatora, jest to aplikacja komercyjna) i publikowałem w folderze, który był w istniejącym projekcie internetowym połączonym z IIS.

Spowodowało to błąd podczas publikowania, który początkowo mnie zaskoczył, ponieważ publikowałem w systemie plików, a nie w IIS (myślałem).

Rozwiązaniem była zmiana publikowania w folderze na poza projekt WWW.

JohnC
źródło
0

Było dobrze, localhostale kiedy opublikowałem wydanie na serwerze, zacząłem ten sam błąd na kilku stronach. Potem wyczyściłem rozwiązanie, przebudowałem i opublikowałem, wszystko się poprawiło.

Baqer Naqvi
źródło
0

Czasami najlepsza jest prosta odpowiedź. W moim projekcie miałem dwa pliki web.config. Ten na poziomie głównym wymagał zmiany, aby uporać się z przekroczeniem limitu czasu sesji (co spowodowało ten problem). Miałem osobny plik konfiguracyjny w katalogu Razor Views, który zawierał ustawienia Razor i jego widoków. Dodałem tam sekcję (nie na poziomie aplikacji!). Nie zdając sobie sprawy, że mam dwa osobne pliki web.config, próbowałem wszystkiego oprócz szukania rzeczy oczywistych.

Guy Schalnat
źródło
0

moim błędem było przypadkowe skopiowanie wklejenia pliku web.config do innego folderu na serwerze WWW

krilovich
źródło
0

Wystąpił ten błąd, gdy zapomniałem przekonwertować opublikowany projekt na aplikację w IIS.

eaglei22
źródło