allowDefinition = 'MachineToApplication'으로 등록 된 섹션을 응용 프로그램 수준 이상으로 사용하는 동안 오류가 발생했습니다


193

응용 프로그램 수준을 넘어 allowDefinition = 'MachineToApplication'으로 등록 된 섹션을 사용하면 오류가 발생합니다.

내 / portal / 디렉토리에있는 모든 aspx 페이지의 맨 위 줄에이 오류 메시지가 표시되며 이것이 일반적인 오류라는 것을 알고 있습니다. 나는이 오류 메시지를 끝없이 봤으며 IIS에서 응용 프로그램으로 / portal / 폴더를 구성하라는 많은 게시물을 보았고 web.configs를 중첩했다는 더 많은 게시물을 보았습니다 어떤 게시물도 솔루션에 대한 지침을 제공하지 않습니다).

내 설정은 루트 디렉토리에 web.config가 있고 / portal / directory에 회사 포털을 만들려고한다는 것입니다. / portal / 디렉토리에는 자체 (필수) web.config가 있습니다.

내 web.config 줄 50은 다음과 같습니다.

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

따라서 domain.com/web.config 및 domain.com/portal/web.config ...가 있으므로 domain.com/portal/default.aspx 페이지가로드되지 않습니다.

이것에 대한 진정한 해결책은 무엇입니까? 어떻게 든 루트 web.config를 / portal / 디렉토리 web.config와 병합하는 방법을 찾습니까? 아니면 여기에서 벗어 납니까?

어떤 안내라도 대단히 감사하겠습니다!


1
/ portal /이 기본 웹 사이트에서 별도의 응용 프로그램이 될 것으로 기대하는 경우 (web.config를 여기에 놓는 경우) 가상 디렉터리로 설정해야합니다. 어떤 버전의 IIS를 사용하고 있습니까? 일반적으로 디렉토리를 마우스 오른쪽 버튼으로 클릭하고 속성에서 "디렉토리"탭을 찾은 다음 응용 프로그램 이름 옆의 "만들기"버튼을 누르십시오. 현재 회색으로 표시되어있을 수 있습니다. 상위 web.config 파일의 범위를 제한하려면 inheritInChildApplications = "false"속성을보십시오. IIS 버전을 알려주세요.
대시

안녕하세요 대쉬. 저는 IIS7을 사용하고 있습니다. / portal /은 사람들이 문서를 저장하고, 달력을 보관할 수있는 회사의 직원 디렉토리 일뿐입니다. 나는 Benni가 당신이 말한 것을 요약했다고 생각합니다. 그의 두 번째 옵션에서, 그는 IIS 솔루션을 개괄했습니다. 그 두 가지 솔루션 중 하나가 확실하다고 생각합니다. 이 대시를 읽고 도와 주셔서 감사합니다. "만들기"옵션이 보이면 내가가는 길을 알게 될 것입니다! 다시 감사합니다!
Jason Weber

1
게시하기 전에 사전 컴파일하도록 게시 프로필을 정의한 후이 문제가 발생했습니다. 따라서 obj 폴더는 프로젝트를 중단시킨 web.config를 싫어하고 obj 폴더의 모든 항목을 삭제 한 후에 다시 작동했습니다.
Rumplin

답변:


219

배경 정보 만 제공합니다. ASP.NET 웹 사이트의 구성 정보는 하나 이상의 Web.config 파일에 정의되어 있습니다. 구성 설정은 계층 적으로 적용됩니다. 웹 서버의 모든 웹 사이트에 대한 기본 구성 정보를 설명하는 "글로벌"Web.config 파일이 있습니다. 이 파일은 %WINDIR%\Microsoft.Net\Framework\version\CONFIG폴더에 있습니다. 웹 사이트의 루트 폴더에 Web.config 파일이있을 수도 있습니다. 이 Web.config 파일은“global”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

두 가지 가능한 접근 방식을 올바르게 식별했습니다.

1-두 번째 web.config의 내용 및 설정이 허용하는 경우 (예 : 동일한 인증 방법)- <authentication>최상위 web.config에 전체적으로 정의해야하는 설정 및 기타 요소를 추가하십시오.

2-web.config 컨텐츠를 병합 할 수 없으면 아래의이 링크 아카이브 링크에 포함 된 단계에 따라 서브 폴더를 IIS의 웹 애플리케이션으로 전환 할 수 있어야합니다. 원래 링크가 더 이상 작동하지 않습니다. (참조 보관 ) 희망이 도움이됩니다.


8
예, Benni는 절대적으로 도움이되고 많은 것들을 정리했습니다. 이 질문에 답변 해 주셔서 감사합니다. 나는 당신의 대답을 읽음으로써 많은 것을 배웠습니다. 적어도 인증 부분 인 두 개의 web.config 파일을 병합하려고 시도하지만 작동하지 않으면 다양한 IIS7 옵션을 살펴 보겠습니다. 시간과 정보 감사합니다, Benni!
Jason Weber

13
웹 배포 패키지를 빌드하면 다음에 빌드 할 때이 문제가 발생합니다. 그것은 MyWebSiteProject / obj / Debug /에 Web.config의 사본을 가지고 있습니다 ...
Curtis Yallop

4
거의 하루 동안이 것을 알아 내려고 노력한 후에 마침내 솔루션을 정리하고 다시 작성하는 것과는 반대로 실제로 문제를 설명하는 자세한 심층 답변이 있습니다. 감사합니다!
Dr. Paul Jarvis

2
여기서 가장 큰 문제는 초기 빌드가 작동했지만 최상위 web.config에서 허용 된 설정이 이제 obj 폴더에 복사 된 web.config에서 유효하지 않기 때문에 후속 빌드가 실패한다는 것입니다. 트릭은 최상위 레벨에서 문제가되는 속성을 제거하고 obj 폴더를 제거하여 합법적 인 web.config를 하위 폴더로 가져 오는 것입니다. 분명히 이것은 Visual Studio의 버그이지만 하위 수준 web.config에서 잘못된 최상위 web.config의 특성을 사용할 필요가없는 경우 해결 방법은 간단합니다.
csells

2
Visual Studio 2012 및 2013에서 구성 파일에 Copy to Output Directory = Always Copy 인 경우 게시 프로세스는 구성 파일의 복사본을 bin 및 obj 폴더에 놓은 것으로 보이며이 예외가 발생합니다. Tim C.가 식별 한이 공개 문제점에 대한 솔루션은 구성 파일 특성을 복사 금지로 설정하는 것입니다.
criticalfix

68

그만한 가치가 있기 때문에 "응용 프로그램 수준을 넘어 allowDefinition = 'MachineToApplication'으로 등록 된 섹션을 사용하는 것은 오류입니다."라는 오류가 발생했습니다. \ myWebApp \ obj \ Debug 및 \ myWebApp \ obj \ Release 디렉토리를 지워서 해결했습니다. 또한 기본 시작 페이지를 설정해야했습니다. 그러나 그런 다음 앱이 정상적으로 시작되었습니다. HTH.


24
+1 OBJ 폴더를 삭제하는 것이 일반적인 해결책 인 것 같습니다 ... stackoverflow.com/a/5175074/188926
Dunc

1
OBJ 폴더의 내용을 삭제하면이 문제가 해결되었습니다. 이 오류의 다른 잠재적 원인이 많이있는 것 같습니다. 정답을 찾는 데 도움이 된 문구는 "게시 중"이었습니다.
Jim Neff

1
OBJ 폴더에 있다면 시도해보십시오.
B. Clay Shannon

기본 시작 페이지를 설정하면 디버그 폴더를 삭제 한 후에 충분하지 않습니다 (두 가지를 모두 수행하십시오).
LoJo

이것을 시도했지만 작동하지 않았습니다. 그런 다음 게시 된 파일을 IIS 내 응용 프로그램으로 변환하는 것을 잊어 버렸습니다.
eaglei22

60

RY4N이 위에서 말했듯이 프로젝트 폴더의 web.config가 반드시 문제를 일으키는 것은 아닙니다. 경우에 따라 디버그 프로필에서 빌드를 실행하면 문제가있는 프로젝트 아래의 디버그 폴더에 이물질이 남는 것으로 나타났습니다. 여기에 종종 web.config 파일이있어서 릴리스 프로파일에서 빌드를 실행할 때 위의 오류가 발생합니다.

여기에서 나를 위해 해결책은 이전 빌드가 프로젝트 디렉토리 아래에 만든 전체 디버그 폴더를 삭제하는 것입니다.


1
매튜 감사합니다. 나는 마침내 그것을 오래 전에 알아 냈습니다. 그러나 예, 디버그가 아닌 릴리스에서 컴파일해야했습니다. 시간을내어 답변 해 주셔서 감사합니다.
Jason Weber

3
팁 고마워! 웹 사이트 프로젝트에서 bin 및 obj 폴더를 삭제하고 다시 빌드 할 때 문제가 해결되었습니다.
Paul Stegler

22

가정용 컴퓨터에서도 발생했지만 릴리스 구성에서 빌드 뷰를 활성화하고 릴리스 구성을 빌드 한 경우에만 가능합니다. 그렇지 않으면 발생하지 않았습니다.

빌드 뷰 옵션이 매우 훌륭하지만이 "오류"가 항상 나타나고 앱을 실행할 수 없기 때문에 비활성화했습니다.


2
주님 감사합니다 ... 그것은 몇 가지 다른 제안과 함께 트릭을하는 것처럼 보였습니다. 시간을내어 답변 해 주셔서 감사합니다.
Jason Weber

1
이것은 나에게도 일어나고 있었다. 이유가 확실하지 않습니다. "MvcBuildViews"설정이 크게 유용하지는 않습니다.
Ken Smith

사용자 설정에 대해서만 MvcBuildViews를 설정하는 방법이 있습니까? webproject.csproj.user 파일에서 좋아요?
C. Tewalt

VS 2013 용 업데이트 2를 설치 한 후이 오류가 발생하기 시작했습니다. 최상위 수준의 하위 자식 웹 사이트가 있고 IIS 응용 프로그램으로 구성된 프로젝트가 있습니다. MvcBuildViews를 끄면 문제가 해결되었습니다.
Greg Enslow

13

그냥 말하기

업그레이드하는 경우 (예 : 2008-> 2010) 프로젝트 Visual Studio는 새 솔루션에 추가 된 프로젝트 솔루션에서 백업을 생성합니다 (허용하는 경우). 위의 지적 된 오류는 위에서 지적한 오류가 발생할 수있는 위치입니다. .

" 웹 사이트의 하위 폴더 중 하나에있는 Web.config 파일보다 응용 프로그램 수준 이상으로 정의 할 수없는 이러한 구성 요소 중 하나가 있습니다. "@benni_mac_b

문제를 해결하려면 이 시나리오에서 프로젝트와 솔루션에서 백업 폴더를 제거하면됩니다.


그 정보를 주셔서 감사합니다, Ryan .... VS 2010 만 있습니다. 프로젝트와 솔루션에서 백업 폴더를 제거한다고 말할 때 무슨 의미인지 잘 모르겠습니다. 그러나 나는 당신의 대답을 더 자세히 살펴볼 것입니다. 다시 도와 주셔서 감사합니다. 방금 다음 질문을 게시했습니다. stackoverflow.com/questions/10414751/…
Jason Weber

12

나는 이것이 일어날 수있는 또 다른 이유를 생각해 냈습니다.

2.0으로 작성된 오래된 웹 응용 프로그램이 있습니다. 4.5 솔루션으로 마이그레이션했습니다.

응용 프로그램은 Visual Studio 내부에서 제대로 빌드되고 디버깅되었지만 웹 응용 프로그램 게시를 시도 할 때이 오류가 계속 발생했습니다.

마지막으로 web.config 파일의 빌드 작업이 "컨텐츠"가 아닌 "내장 리소스"라는 문제가 발견되었습니다. 또한 Copy To Output Directory는 "Copy not copy"가 아닌 "Always Copy"로 설정되었습니다. 이 설정을 언제했는지는 모르지만 2.0 버전의 응용 프로그램으로 돌아 왔다고 생각합니다.

web.config 파일의 설정을 수정하면 Visual Studio 2012 게시의 게시 작업이 완벽하게 작동 할 수있었습니다.


다른 모든 솔루션을 시도했습니다. 이것은 도움이되었습니다. 내 프로젝트는 그래서 어쩌면 "항상 복사"기본값이 2010 년이었고, 2015 년 비주얼 스튜디오 2010에서 시간이 지남에 따라 마이그레이션 된
안드레아스 Rathmayr

내 web.config의 속성은 FileName과 FullPath의 두 가지로 제한됩니다. 그렇지 않으면 빌드 액션이 무엇인지 확인합니다.
B. Clay Shannon

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

"응용 프로그램 수준을 넘어 allowDefinition = 'MachineToApplication'으로 등록 된 섹션을 사용하는 것은 오류입니다.이 오류는 가상 디렉토리가 IIS에서 응용 프로그램으로 구성되어 있지 않기 때문에 발생할 수 있습니다."

VS.NET 에서이 문제가 발생했습니다. 일부 구성 변환을 구성 할 때 Web.config 파일의 속성을 "Copy always"로 잘못 설정 한 것으로 나타났습니다. 일반적으로 변환 파일을 "항상 복사"로 설정했지만 web.config 루트 파일은 "복사하지 않음"으로 두십시오.

web.config의 속성을 변경하면 중첩 된 변환도 모두 변경되므로주의하십시오.

따라서 수정하려면 다음을 수행하십시오.

1) web.config를 "복사하지 마십시오"로 변경

2) 선택적으로 config 변환을 사용하는 경우 "Copy always"로 설정하십시오.

3) 솔루션에서 obj 및 bin 폴더를 삭제하십시오.이 폴더는 보이지 않을 수 있으므로 솔루션 탐색기에서 프로젝트 노드를 선택하고 "모든 파일 표시"도구 모음 단추를 클릭하십시오.

4) 출판

나를 위해 일했다.


5

응용 프로그램을 게시하는 동안에 만이 오류가 발생했습니다.

web.config (및 변환) 파일의 속성은 다음과 같이 설정되었습니다.

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

해결책은 설정을 다음과 같이 변경하는 것이 었습니다.

  • Build Action - Content
  • Copy to Output - Do not Copy

4

또한이 문제가 있었고 게시 마법사를 사용하여 내 사이트를 웹에 게시 한 후에 발생했습니다.

나는 주위에 많이 파고가 연결 웹 사이트에이 버그 보고서를 통해 온 후, https://connect.microsoft.com/VisualStudio/feedback/details/779737/error-allowdefinition-machinetoapplication-beyond-application-level

MS가 응답하고 게시 할 때 왜 이런 문제가 발생했는지 설명하면서도 문제를 해결하는 임시 해결 방법도 포함되었습니다.


4

가상 디렉토리를 삭제 하고 다시 작성 하십시오. 마우스 오른쪽 버튼을 클릭하고 가상 디렉터리를 " 응용 프로그램 "으로 변환


3

Web.config솔루션 탐색기 에서 파일을 클릭하고 "속성"을 마우스 오른쪽 단추로 클릭하고 "출력 디렉토리에 복사 : 복사 안 함"으로 변경하십시오.

여기에 이미지 설명을 입력하십시오


1

나에게 그 이유는 obj 폴더가 웹 사이트 폴더 아래에 있었고 다른 구성을 작성한 후 여러 web.config가 나타났기 때문입니다. 웹 사이트에서 obj 폴더를 제거하여 vs2012의 문제를 해결했습니다. 이를 위해 웹 사이트 프로젝트 파일의 모든 구성에 수동으로 (메모장에서) $ (SolutionDir) \ Obj \ $ (Configuration)을 추가했습니다.


1

사이트를 게시 할 때 동일한 문제가 발생했습니다. 사이트를 빌드하면 아무런 문제가 없지만 게시하는 동안이 끔찍한 오류가 발생합니다.

"응용 프로그램 레벨 이상으로 allowDefinition = 'MachineToApplication'으로 등록 된 섹션을 사용하는 것은 오류입니다.이 오류는 IIS에서 응용 프로그램으로 구성되지 않은 가상 디렉토리로 인해 발생할 수 있습니다."

나는이 게시물에서 여기에 언급 된 모든 것을 시도하지 않았다. 나를 위해 일한 것은 내가 사용했던 것과 정확히 동일한 새 게시 프로파일을 작성하는 것이었고 잘 작동하지만 오류가 발생하지 않았다. 새로운 프로필과 함께하지만 이전과 관련이 있습니다. 차이점이 무엇인지 모르겠지만 적어도 MVC 프로젝트를 게시 할 수 있습니다.

이것이 누군가를 돕기를 바랍니다!


1

또 다른 이유가 있습니다. 전체 웹 앱을 자체 하위 폴더 중 하나에 복사하면이 오류가 발생합니다. 한 컴퓨터에서 다른 컴퓨터로 복사 할 때 오래된 사이트로이 작업을 수행했습니다. 약 2 년 후에 사이트를 확인하라는 메시지가 표시되고 오류가 발생했습니다. 구성 파일이 여러 개 없기 때문에 상당히 알아 냈습니다.


1

나는이 문제가 있었고 오래된 어셈블리 등의 솔루션을 청소하여 해결했습니다.

vs : 빌드> 클린 솔루션

그런 다음 다시 작성하십시오.


1

Windows 시작-> 사이트 열기-> IIS-> 사이트를 마우스 오른쪽 단추로 클릭-> 웹 사이트 관리-> 고급 설정-> 실제 경로 찾아보기-> 현재 선택한 폴더의 하위 폴더를 선택하십시오.

논리는 하위 폴더 내부의 웹 구성 파일이 변경을 시도하고 있으며 허용되지 않으며 선택한 폴더 여야합니다. http://scottonwriting.net/sowblog/archive/2010/02/17/163375.aspx


1

웹 사이트에 하위 웹 사이트를 배포하려고 할 때도이 오류가 발생합니다.

해결책은 다음과 같습니다.

  1. 하위 web.config에서 profile , membership , roleManager , sessionState 같은 일부 구성 탭을 제거해야합니다.
  2. 다음과 같이 인증을 없음으로 변경하십시오. <authentication mode="None" />
  3. 그리고 IIS로 이동하여 하위 폴더 - > 응용 프로그램 추가를 마우스 오른쪽 버튼으로 클릭하십시오 .
  4. 이 문제를 해결하려면 IIS를 재설정하십시오.

다른 문제가 발생하면 주저하지 말고 도움을 받으십시오.


1

Visual Studio 2017의 localhost 에서이 오류가 발생했으며 Visual Studio를 간단히 다시 시작하면 문제가 해결되었습니다.

web.config가 두 개 이상 있으면이 문제가 발생할 수도 있습니다. 예를 들어 하위 폴더 내의 하나. 다른 응용 프로그램을 위해 의도적으로 여러 개의 web.config 파일이있는 경우 : 디렉토리가 가상 디렉토리로 표시되지 않아야합니다.


0

이 오류를 발생시키는 mysite.test 인 localchost / mysite.test를 통해 로컬 사이트에 잘못 액세스하지 않도록주의하십시오 .

localhost / dir_name과 같은 사이트에 액세스하면 web.conf가 루트 수준 아래로 떨어 지므로이 오류가 발생합니다.


0

나는 응용 프로그램을 마이그레이션하고 있었고 응용 프로그램에는 여러 응용 프로그램 (여러 web.configs)이 포함되어 있습니다. IIS로 이동 한 다음 하위 폴더를 마우스 오른쪽 버튼으로 클릭 한 다음 "응용 프로그램으로 변환"을 클릭하면 효과가있었습니다.


0

이 오류는 다른 사람과 다르게 나타납니다.

웹 배포 프로젝트를 사용하여 vs2010에서 vs2012 및 새로운 웹 게시 프로필로 마이그레이션했습니다.

파일 시스템에 게시하기 위해 vs2012에서 새 웹 게시 프로젝트를 만들었습니다 (우리는 별도의 설치 관리자 빌더가 상용 앱임) .IIS에 연결된 기존 웹 프로젝트 내부의 폴더에 게시하고있었습니다.

이로 인해 게시 중에 오류가 발생하여 IIS가 아닌 파일 시스템에 게시했기 때문에 처음에는 나를 알았습니다 (생각했습니다).

해결책은 게시 폴더를 웹 프로젝트 외부로 변경하는 것이 었습니다.


0

괜찮 았지만 localhost서버에 릴리스를 게시 할 때 몇 페이지에 대해 동일한 오류가 시작되었습니다. 그런 다음 솔루션을 정리하고 다시 작성하고 게시하면 문제가 해결되었습니다.


0

때로는 간단한 대답이 가장 좋습니다. 내 프로젝트에 두 개의 web.config 파일이 있습니다. 기본 수준의 하나는 세션 시간 초과를 처리하기 위해 변경 해야하는 곳입니다 (이 문제가 발생했습니다). Razor Views 디렉토리에 Razor 및 해당보기에 대한 설정이있는 별도의 구성 파일이 있습니다. 거기에 섹션을 추가하고있었습니다 (응용 프로그램 수준이 아닙니다!). 두 개의 별도 web.config 파일이 있다는 것을 알지 못했지만 명백한 것을 찾는 것 외에 모든 것을 시도했습니다.


0

실수로 실수로 웹 서버의 다른 폴더에 web.config를 붙여 넣을 수 없었습니다.


0

게시 된 프로젝트를 IIS 내의 응용 프로그램으로 변환하는 것을 잊었을 때이 오류가 발생했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.