Błąd: allowDefinition = 'MachineToApplication' poza poziom aplikacji

193

Pobrałem projekt online w ASP.Net. Podczas uruchamiania aplikacji pojawia się 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.

Jakie zmiany należy wprowadzić w pliku web.config lub w innym miejscu, aby to działało?

Deepali
źródło
53
Żadna z odpowiedzi znalezionych w Internecie nie działała dla mnie. Mój problem został rozwiązany poprzez pokazanie wszystkich ukrytych plików / folderów i usunięcie objfolderu.
The Muffin Man
6
Ten problem nadal objawia się w VS2012. Otworzyłem raport o błędach w firmie Microsoft. Każdy, kto ma problem, proszę zagłosować za raportem o błędzie connect.microsoft.com/VisualStudio/feedback/details/779737/…
Eric J.
4
usunięcie folderu obj rozwiązało również ten problem. dzięki @Nick! (przepraszam za przebudzenie)
Jordan Wayne Crabb
ROZWIĄZANIE TUTAJ: stackoverflow.com/questions/9300927/…
benni_mac_b
w moim przypadku dodatkowy problem web.config w podfolderze powoduje ten problem. Po usunięciu tego dodatkowego pliku web.config błąd zniknął
Dio Phung

Odpowiedzi:

96

Właśnie spotkałem tę „rozkosz”. Wygląda na to, że pojawia się tuż po opublikowaniu aplikacji internetowej w trybie wydania.

Jedynym sposobem, aby konsekwentnie obejść problem, który znalazłem, jest przestrzeganie poniższej listy kontrolnej:

  1. Czyste rozwiązanie, gdy Twoje rozwiązanie jest skonfigurowane w trybie Release.
  2. Czyste rozwiązanie, gdy Twoje rozwiązanie jest skonfigurowane w trybie debugowania.
  3. Kompiluj, gdy Twoje rozwiązanie jest skonfigurowane w trybie debugowania.
John Reilly
źródło
18
Tylko odpowiedź, która dla mnie zadziałała. Czekało na mnie wiele innych błędów, ale nie były one powiązane. Dotarłem tutaj, ustawiając MvcBuildViewsna true.
Benjamin
+1 BTW: Myślę, że powodem dla mnie było to, że najnowszą wersją, którą miałem, była debugowanie . Otworzyłem rozwiązanie, naprawiłem błąd i próbowałem zbudować w trybie R Release . Czyszczenie w wersji nie działało, ale czyszczenie w debugowaniu działało . (Prawdopodobnie potrzebna była kombinacja 2, tj. Wyczyść wszystkie stare referencje do bibliotek DLL, czy to Debug, czy Release ).
Scotty.NET,
4
Zrobiłem czyszczenie , potem poszedłem do * właściwości projektu -> WWW -> Utwórz katalog wirtualny, a następnie problem został rozwiązany
gldraphael
Czyste i odbudowane w trybie debugowania to wszystko, czego potrzebuję. Nie ma potrzeby przełączania się między wersją a debugowaniem. Ale tak, CZYSZCZENIE jest bardzo ważne. To sedno sprawy.
markaaronky
1
Czyszczenie nie jest dostępne w moim przypadku, czego nigdy wcześniej nie widziałem. Jest to bardzo stara aplikacja VB.NET, którą odziedziczyłem od byłego kolegi.
tnk479,
82

Właśnie natknąłem się na ten post i tak się ze mną działo.
Tylko Cleanprojekt i błąd znikają. (musi to być błąd VS2010)

Eduardo Molteni
źródło
to rozwiązanie, jeśli pojawi się to jako błąd w Visual Studio.
gideon
22
Czasami czyszczenie nie usuwa objfolderu. Czasami to też wymaga usunięcia.
jaypeagi
1
Nie działało ani czyszczenie, ani usuwanie obiektów. Rozwiązanie Johnny'ego Reilly'a zadziałało dla mnie.
Benjamin
Musiałem pracować w trybie debugowania i zwalniania, aby się tego pozbyć. Uruchomienie go tylko w celu debugowania nie rozwiązało problemu.
Juha Palomäki
Ten sam problem nadal występuje w VS2013SP1. Proste czyszczenie pozwala mi ponownie wdrożyć.
Brian Knoblauch,
25

Właśnie miałem ten problem podczas tworzenia drugiej wersji mojej witryny. Nie stało się to, kiedy zbudowałem go po raz pierwszy.

Właśnie usunąłem foldery bin i obj, uruchomiłem Clean Solution i zbudowałem go ponownie, tym razem bez problemu.

xiecs
źródło
2
To jedyne rozwiązanie, które działało dla mnie w VS Express 2012 for Web. Zacząłem też otrzymywać ten błąd dopiero po utworzeniu konfiguracji rozwiązania i dodaniu MvcBuildViews ustawionej na wartość true w jej grupie PropertyGroup w źródle .csproj.
Jeremy Cook,
20

Żaden. Musisz skonfigurować katalog, w którym umieściłeś witrynę jako aplikację internetową w IIS .


źródło
1
Chociaż technicznie jest to zmiana „gdzie indziej, aby to zadziałało”;)
Zhaph - Ben Duguid
2
i jest to rozwiązanie, jeśli pojawi się to jako błąd w Twojej aplikacji internetowej! = P
gideon
Byłem już skonfigurowany jako aplikacja. Rozwiązanie Johnny'ego Reilly'ego zadziałało w moim przypadku.
Benjamin
Właśnie próbuję uruchomić szablonową aplikację Webforms do pracy. Jest dobrze na localhost, ale nie na serwerze w sieci LAN. To rozwiązanie działało dla mnie: VS2015 CE, Windows Server 2008 w mojej sieci LAN. Skorzystałem z tej strony MS, aby wyjaśnić, co robić na IIS: support.microsoft.com/en-gb/kb/917413 . Brak zmian w kodzie szablonu.
Tim
16

Ten błąd występuje podczas próby otwarcia projektu jako strony internetowej. Najłatwiejszym sposobem ustalenia, czy utworzyłeś stronę internetową czy projekt, jest sprawdzenie folderu rozwiązania (tj. Miejsca, w którym zapisałeś kod) i sprawdzenie, czy masz plik * .sln w katalogu głównym, jeśli tak, to „ stworzyliśmy projekt.

Żeby dodać, napotkałem ten błąd właśnie teraz, gdy próbowałem otworzyć projekt, który utworzyłem jakiś czas temu, wybierając „Plik”, „Otwórz stronę internetową” z menu Visual Studio, podczas gdy powinienem był wybrać „Plik”, „Otwórz projekt” zamiast. Zaraz po tym zdałem sobie sprawę :)

Pete
źródło
to też był mój problem
mgrenier
13

W Visual Studio 2013 zmagałem się z tym przez jakiś czas i jest to dość łatwe do rozwiązania, wystarczy postępować zgodnie z tym, co mówią wyjątki: „katalog wirtualny nie jest konfigurowany jako aplikacja w IIS”

W moim przypadku WebServicezasadziłem IIS websitetak

  1. Otworzyłem stronę internetową w menedżerze IIS
  2. kliknij prawym przyciskiem myszy folder WCF
  3. kliknięty Convert to Application
  4. a następnie przesłane za pomocą Ok

WCF powraca.

Marek
źródło
1
Napotkałem ten problem, gdy przeniosłem aplikację na domyślną stronę internetową. Punkt 3 rozwiązał mój problem.
bikram s.
To działało dla mnie, kiedy przeprowadziliśmy się do nowego serwera WWW. Po wykonaniu „Konwertuj na aplikację” symbol folderu zmienił się, a aplikacja web ASP.NET MVC zaczęła działać na tym serwerze WWW.
Greg Barth
11

Błąd sugeruje, że używany kod oczekuje, że katalog wirtualny zostanie skonfigurowany w IIS.

Przejrzyj dokumentację i dodaj wymagany katalog wirtualny. Powinien to być katalog, który ma web.configw sobie (nie katalog główny).

Oded
źródło
8
Usunięcie drugiego pliku web.config z niższego katalogu rozwiązało problem.
Lucas B
10
Jeden z moich chłopaków miał <authentication mode="Forms"><forms name="..." loginUrl="~/Login/Login/" timeout="2880" /></authentication>w jego Web.configw Views, a następnie w folderze bagażnika, co spowodowało ten problem.
Serj Sagan
10

Jeśli masz projekt MVC z włączoną kompilacją widoków, jednym z rozwiązań jest usunięcie folderu obj przed kompilacją. Dodaj do pliku projektu:

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

Oto artykuł: Jak usunąć folder bin i / lub obj przed kompilacją lub wdrożeniem

Szaman
źródło
8

Ostatnia zmiana pliku web.config może znajdować się w niewłaściwym pliku web.config.

<machineKey...>Nieruchomość została dodana do views / web.config . Bez względu na to, ile Cleans i Rebuilds błąd pozostał. Rozwiązaniem było przeniesienie właściwości do katalogu głównego /web.config .

SushiGuy
źródło
Przypadkowo skopiowaliśmy nadrzędny plik Web.config do folderu / Views. Umieść tam oryginalną, znacznie mniejszą wersję folderu Widoki, a strona znów będzie działać.
Grandizer
6

jeśli kiedykolwiek wystąpi ten 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

ROZWIĄZANIE
Miałem ten sam problem z VS 2012. Rozwiązałem to przez

  1. Zwolnij swój obecny projekt
  2. edytuj .csproj
  3. Znajdź to <MvcBuildViews>false</MvcBuildViews>
  4. Zamiast fałszu zmień wartość na true
  5. Załaduj ponownie swój projekt i nie powinieneś mieć więcej tego błędu

Jeśli tak, to jednym z rozwiązań jest usunięcie zawartości folderu obj w projekcie wygenerowanym przez kompilator.

visar_uruqi
źródło
18
To dziwne, ustawienie MvcBuildViewsw trueten sposób spowodowało błąd.
Benjamin
Zacząłem również otrzymywać komunikat o błędzie po zmianie MvcBuildViews na true. Pozbyłem się komunikatu o błędzie, zmieniając wartość z powrotem na false.
Juha Palomäki,
3
Zrobiłem „Czyste rozwiązanie” zarówno w trybie wydania, jak i debugowania, a teraz kompilacja działa również z<MvcBuildViews>true</MvcBuildViews>
Juha Palomäki,
@ JuhaPalomäki super sweet! Dzięki.
Haroon
Miałem dokładnie odwrotną sytuację niż @visar_uruqi. W moim pliku .csproj miałem opcję MvcBuildViews ustawioną na true, a gdy ustawiłem na false, błąd został pominięty (nie pokazano).
Bronek
5

W moim przypadku problem pojawił się dopiero po opublikowaniu projektu w podkatalogu. Z powodu braku wiedzy umieściłem swój web_publishpodkatalog w web_projectkatalogu.

Oczywiste jest, że web_publishzawiera również te same, Web.configktóre zawiera projekt. Nie web_projectwiadomo jednak, że web_publishnależy unikać mojego wyszukiwania Web.configw zagnieżdżonych podkatalogach. W ten sposób Web.configs zostały zduplikowane i pojawił się błąd.

Rozwiązaniem było umieszczenie mojego web_publishgdzie indziej.

pepr
źródło
5

W moim przypadku był folder „Kopia zapasowa”, który zawierał tam kolejną kopię całej witryny. Oznaczało to kolejne, web.configwięc kompilacja zakończyła się niepowodzeniem z tym błędem. Usunąłem folder „Kopia zapasowa”, zrobiłem czyste rozwiązanie w kompilacjach Debug i Release, a błąd zniknął.

druid
źródło
Miałem podobną sytuację, ktoś utworzył podfolder „Opublikowany” w katalogu głównym witryny na dysku (jest to stary projekt WWW, jeden z plików bez rozwiązania), i miał w nim plik Web.config. Błąd wystąpił, gdy program Visual Studio próbował go zbudować, i oczywiście żadna ilość czyszczenia / usuwania folderów „obj” itp. Nie naprawiła tego. Widziałem całkiem sporo przypadków tego błędu i prawie zawsze jest to gdzieś ukryty duplikat Web.config ... (naprawdę kiepski komunikat o błędzie!)
Szczegół
4

W moim przypadku,

Rozwiązanie zawiera 6 projektów, 1 główny i 5 podkatalogów. wszystkie podkatalogi posiadające web.config.

Podczas uruchamiania dowolnej strony w podkatalogach pojawiał się ten sam błąd.

Usunąłem tę linię z web.config,

<authentication mode="Windows"/>

to działało dla mnie.

p_champ
źródło
Jaką linię usunąłeś?
Mark Berry
Linia była tam, ale chyba nie pojawiła się z powodu jakiegoś problemu z wcięciem. Zredagowałem i wkleiłem kod w bloku kodu, pokazuje teraz. Sprawdź i daj mi znać, czy mógłbym w czymś pomóc.
p_champ
Dzięki, to potwierdza linię, w której również mnie nie działało. Mam tylko jedną stronę, więc obejrzałem ją, otwierając jako stronę internetową, a nie jako projekt.
Mark Berry
4

Wyczyść projekt Usuń folder / obj (prawdopodobnie używasz publikowania i wdrażania? - jest w nim błąd)

NicoJuicy
źródło
Jedyne rozwiązanie, które działało dla mnie. Dostałeś się tutaj ustawiając <MvcBuildViews> true </MvcBuildViews>.
Paul,
3

Mój problem polegał na tym, że przypadkowo opublikowałem moją usługę internetową w wstępnie ukończonej lokalizacji na nowej instalacji VS2010.

Opublikowałem w folderze o nazwie PreCompiledWeb i , że obecność pliku web.config pomieszała go.

Po prostu nukowałem folder i odświeżyłem projekt.

Po dwukrotnym kliknięciu tego błędu - zabrałem mnie do tego błędnego pliku web.config, który mnie wyrzucił.

gaijintendo
źródło
2

Może to być problem z wersją, gdy pobierasz projekt .NET Framework 2.0 i chcesz go otworzyć w VS2008, wtedy będziesz musiał zaktualizować do najnowszej wersji, a VS utworzy kopię zapasową folderu w tym samym katalogu głównym. uzyskaj odpowiedź tutaj .

gofor.net
źródło
Odpowiedź ranganha tutaj zawiera więcej szczegółów.
Mark Berry
2

Wystąpił ten błąd podczas budowania rozwiązania przy użyciu Web Deployment Project utworzonego w moim rozwiązaniu. Rozwiązuję błąd, usuwając folder, w którym zbudowany jest projekt Web Deployment Project. Ten folder jest określony w atrybucie „Folder projektu” właściwości WDP

Ilya
źródło
2

Usuń foldery bin i obj. Następnie odbuduj rozwiązanie.

rovsen
źródło
W Eksploratorze plików użyj zapytania „obj” kind: = folder i „bin” kind: = folder, aby znaleźć / usunąć te foldery. To zadziałało dla mnie.
Robert J. Good
2

Najwyraźniej w moim rozwiązaniu były dwa pliki web.config. Korzystam z MVC4, w Widoku był inny plik konfiguracyjny i wprowadzałem zmiany w niewłaściwym pliku. Naprawione tam pomogło mi.

Ale zawsze możesz zmienić domyślne przekierowanie / trasę w pliku global.asax.

Gautam Beri
źródło
1

Prawdopodobnie masz folder projektu sub asp.net w folderze projektu, który nie jest skonfigurowany jako katalog wirtualny. Skonfiguruj projekt do uruchamiania w IIS.

funwithcoding
źródło
1

Ten problem występuje częściej, jeśli w pliku projektu jest włączona opcja „prawda”.

  1. Ustaw false

Jak mówi Jonny:

  1. Czyste rozwiązanie, gdy Twoje rozwiązanie jest skonfigurowane w trybie Release.
  2. Czyste rozwiązanie, gdy Twoje rozwiązanie jest skonfigurowane w trybie debugowania.
  3. Kompiluj, gdy Twoje rozwiązanie jest skonfigurowane w trybie debugowania.
Riccardo Bassilichi
źródło
1

Miałem projekt, że nie chciałem być aplikacją internetową, chciałem, żeby to był folder. Odpowiedzią było całkowite usunięcie pliku web.config. Należy tylko do katalogu głównego aplikacji.

Rob Sedgwick
źródło
1

Jeśli napotkasz ten problem podczas publikowania witryny lub aplikacji na jakimś serwerze, prostym rozwiązaniem, którego użyłem, jest konwersja folderu zawierającego pliki do aplikacji internetowej.

ehabh86
źródło
4
Cześć, witamy w Stack Overflow! Czy możesz rozszerzyć swoją odpowiedź? Czy możesz wyjaśnić, jak przekonwertować folder na aplikację internetową? Pomoże to innym lepiej zrozumieć twoją odpowiedź.
Jesse
1
W Menedżerze usług IIS w okienku Połączenia po prawej stronie kliknij prawym przyciskiem myszy katalog pod utworzonymi witrynami (lub domyślną witryną sieci Web) i wybierz Convert to Application.
Aske B.
1

Ten sam problem mam w VS 2013 po opublikowaniu mojego projektu w trybie debugowania. Problem został rozwiązany przez usunięcie plików obj /

Grigorij Bushuev
źródło
1

Mam projekt strony internetowej.

W moim przypadku przeniosłem plik rozwiązania na inną ścieżkę, co powoduje problem. Przywróciłem go do poprzedniej lokalizacji i problem zniknął.

Daniel Silva
źródło
1

Dla każdego, kto wciąż szuka, moim rozwiązaniem było usunięcie folderów bin i obj i ponowne uruchomienie Visual Studio wydaje się to naprawić.

Ricky G.
źródło
1

Za pośrednictwem programu Visual Studio opublikowałem usługę WCF za pośrednictwem FTP na zewnętrznym serwerze. Działa dobrze lokalnie i podczas publikowania na serwerze wewnętrznym, ale nie na zewnętrznym. Rozwiązaniem było opublikowanie bez podania Site Path (innymi słowy, opublikuj bezpośrednio w katalogu głównym katalogu wirtualnego).

Nie jestem pewien, dlaczego to zadziałało, ponieważ próbowałem już przenieść pliki do katalogu głównego za pośrednictwem zewnętrznego klienta FTP - wśród wielu innych prób, w tym wszystkich wymienionych tutaj. Może to było coś z profilem publikacyjnym, tak jak dla FabianVal . Ale w tym momencie nie mam już ochoty na testowanie, ponieważ spieszy mi się, aby przyspieszyć po wszystkich dniach zmarnowanych na ten problem.

Aske B.
źródło
0

wskazówka 1: wyczyść, a następnie odbuduj.

wskazówka 2: po prostu zamknij VS i otwórz ponownie.

wskazówka 3: pobrany projekt może znajdować się w innym podfolderze ... otwórz folder zawierający pliki .net.

c: / demo1 / demo / (wszystkie pliki)

Powinieneś otworzyć demo z vs ... nie demo1.

Uczeń
źródło
0

Wypróbowałem wszystkie powyższe rozwiązania, ale żadne z nich nie działało na mój problem. (Jestem pewien, że istnieje 1000 rozwiązań tego problemu) W moim scenariuszu próbowałem opublikować moją usługę internetową WCF, którą testowałem w celu uruchomienia.

Nie zdałem sobie jednak sprawy, że w produkcji jesteśmy tylko HTTPS, co oznacza, że ​​przekierowujemy wszystko do HTTPS. Jak się okazało, wskazywałem na usługę przez HTTP zamiast HTTPS, co spowodowało błąd. Rozwiązaniem w tym scenariuszu była po prostu zmiana protokołu adresu na HTTPS zamiast HTTP.

Mam nadzieję, że pomoże to pewnej biednej duszy próbującej rozwiązać ten problem.

ROFLwTIME
źródło