Erro ao usar uma seção registrada como allowDefinition = 'MachineToApplication' além do nível do aplicativo

193

É um erro usar uma seção registrada como allowDefinition = 'MachineToApplication' além do nível do aplicativo.

A linha superior em todas as minhas páginas aspx no meu diretório / portal / tem essa mensagem de erro e sei que é comum. Pesquisei essa mensagem de erro no Google sem fim e vejo muitas postagens dizendo para configurar a pasta / portal / como um aplicativo no IIS (que eu tenho) e mais postagens dizendo que aninhei web.configs (mas nenhuma das publicações oferece orientação para uma solução).

Minha configuração é que eu tenho um web.config no meu diretório raiz e estou tentando criar um portal da empresa, no diretório / portal /. O diretório / portal / possui seu próprio web.config (necessário).

Minha linha 50 do web.config é assim:

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

Então, eu tenho domain.com/web.config AND domain.com/portal/web.config ... para que minha página domain.com/portal/default.aspx não seja carregada.

Qual é a verdadeira solução para isso? De alguma forma, encontro uma maneira de mesclar meu web.config raiz com meu / portal / diretório web.config ou estou muito longe daqui?

Qualquer orientação será imensamente apreciada!

Jason Weber
fonte
1
Se você espera que o / portal / seja um aplicativo separado no site principal (que você está colocando no web.config), é necessário configurá-lo como um diretório virtual. Qual versão do IIS você está usando? Geralmente, você pode clicar com o botão direito do mouse no diretório e, em Propriedades, procurar a guia "Diretório" e clicar no botão "Criar" ao lado do nome do aplicativo, que provavelmente está acinzentado no momento. Para limitar o escopo do arquivo web.config pai, observe o atributo herditInChildApplications = "false". Deixe-me saber sua versão do IIS.
traço
Oi Dash. Estou usando o IIS7 e o / portal / deve ser um diretório de funcionários da nossa empresa onde as pessoas podem armazenar documentos, manter um calendário e coisas assim. Acho que Benni resumiu o que você estava dizendo - em sua segunda opção, ele descreveu a solução do IIS. Tenho certeza de que, entre uma dessas duas soluções, posso descobrir isso. Obrigado pelo seu tempo lendo este Dash e me ajudando. Quando vir a opção "criar", saberei que estou a caminho! Obrigado novamente!
21412 Jason Weber
1
Eu tive esse problema, depois de definir o perfil de publicação para pré-compilar antes da publicação. para que a pasta obj chamasse um web.config que estava interrompendo o projeto, depois de excluir tudo na pasta obj, funcionou novamente.
Rumplin 25/02/19

Respostas:

219

Apenas para informações básicas; As informações de configuração para um site ASP.NET são definidas em um ou mais arquivos Web.config. As definições de configuração são aplicadas de maneira hierárquica. Há um arquivo Web.config "global" que explica as informações de configuração da linha de base para todos os sites no servidor da Web; esse arquivo está na %WINDIR%\Microsoft.Net\Framework\version\CONFIGpasta Você também pode ter um arquivo Web.config na pasta raiz do seu site. Esse arquivo Web.config pode substituir as configurações definidas no arquivo "global" Web.config ou adicionar novas. Além disso, você pode ter arquivos Web.config nas subpastas do seu site, que definem novas definições de configuração ou substituem as definições definidas nos arquivos Web.config mais acima na hierarquia.

Certos elementos de configuração no Web.config não podem ser definidos além do nível do aplicativo, o que significa que eles devem ser definidos no arquivo Web.config "global" ou no arquivo Web.config na pasta raiz do site. O <authentication>elemento é um exemplo. A mensagem de erro acima indica que há um arquivo Web.config em uma das subpastas do site que possui um desses elementos de configuração que não podem ser definidos além do nível do aplicativo.

Fonte: http://scottonwriting.net/sowblog/archive/2010/02/17/163375.aspx

Você identificou corretamente as 2 abordagens possíveis.

1 - Dependendo do conteúdo do seu segundo web.config e se sua configuração permitir (ou seja, o mesmo método de autenticação) - adicione as <authentication>configurações e quaisquer outros elementos que devem ser definidos globalmente no web.config superior

2 - Se você não conseguir mesclar o conteúdo do web.config, poderá transformar a subpasta em um aplicativo da web no IIS seguindo as etapas contidas neste link arquivado abaixo. O link original não está mais funcionando. (veja arquivado ) Espero que ajude.

benni_mac_b
fonte
8
Sim, Benni, absolutamente isso ajudou e esclareceu as coisas - muitas coisas. Eu realmente aprecio o seu tempo em responder a esta pergunta; Eu aprendi muito apenas lendo sua resposta, e as coisas fazem um pouco mais de sentido agora. Acho que vou tentar mesclar os dois arquivos web.config - pelo menos a parte de autenticação - e, se isso não funcionar, examinarei as várias opções do IIS7. Mais uma vez obrigado pelo seu tempo e pelas informações, Benni!
21712 Jason Weber
13
Quando crio um pacote de implantação na Web, ele causa esse problema na próxima vez que o compilar. Tem uma cópia do Web.config em MyWebSiteProject / obj / Debug / ...
Curtis Yallop
4
Depois de quase um dia tentando descobrir isso, finalmente uma resposta detalhada e descritiva que realmente explicou o problema, em vez de dizer ... basta limpar sua solução e reconstruir. Obrigado por isso!
Dr. Paul Jarvis
2
Encontrei o maior problema aqui foi que uma compilação inicial funcionou, mas uma compilação subsequente falhou porque as configurações permitidas no web.config de nível superior não eram legais no web.config que agora foi copiado para a pasta obj. O truque era remover os atributos incorretos no nível superior e remover a pasta obj para obter um web.config legal em uma subpasta. Obviamente, esse é um erro no Visual Studio, mas a solução alternativa é direta se você não precisar usar atributos no web.config de nível superior que são ilegais no web.config de subnível.
21468 Csells
2
No Visual Studio 2012 e 2013, quando o arquivo de configuração possui Copiar para Diretório de Saída = Sempre Copiar, o processo de Publicação parece soltar cópias do arquivo de configuração nas pastas bin e obj, que acionam essa exceção. A solução para esse problema de publicação, identificada por Tim C., é definir a propriedade do arquivo de configuração como Não copiar.
Criticalfix
68

Pelo que vale, recebi o erro: "É um erro usar uma seção registrada como allowDefinition = 'MachineToApplication' além do nível do aplicativo." e acabou resolvendo-o limpando os diretórios \ myWebApp \ obj \ Debug e \ myWebApp \ obj \ Release. Eu também precisava definir uma página de inicialização padrão. Mas, então, o aplicativo foi iniciado corretamente. HTH.

Aaronius
fonte
24
+1 A exclusão da pasta OBJ parece ser uma correção comum ... stackoverflow.com/a/5175074/188926
Dunc
1
A exclusão do conteúdo da pasta OBJ também corrigia isso para mim. Parece haver muitas outras causas possíveis para esse erro. A frase que me ajudou a encontrar a resposta certa foi "durante a publicação".
perfil completo
1
Se eu tivesse na pasta OBJ, tentaria isso.
B. Clay Shannon
Definir a página de inicialização padrão fez o truque para mim depois de excluir a pasta Debug não foi suficiente (portanto, faça as duas coisas).
lojo
Tentei isso e não funcionou. Então percebi que esqueci de converter meus arquivos publicados em um aplicativo no IIS.
eaglei22 4/03
60

Como RY4N diz acima, não é necessariamente o web.config na pasta Projeto que causa o problema. Em alguns casos, descobri que a execução de uma compilação no perfil Debug deixará para trás detritos na pasta Debug no projeto em questão. Geralmente, há um arquivo web.config aqui que leva ao erro acima quando você executa uma compilação subseqüentemente no perfil Release.

A solução que funciona para mim aqui é excluir a pasta Debug inteira que as compilações anteriores criaram no diretório do projeto.

Matthew Brown
fonte
1
Obrigado Matthew; Finalmente descobri isso há algum tempo, mas sim, eu tive que compilar na versão, não na depuração. Agradecemos o seu tempo para responder!
Jason Weber
3
Obrigado pela dica! Acabei de excluir as pastas bin e obj no meu projeto de site e ele resolveu o problema quando eu o reconstruí.
Paul Stegler
22

Isso também estava acontecendo no meu computador doméstico, mas SOMENTE quando eu habilitei Build Views na configuração da versão E criei uma configuração da versão. Caso contrário, não aconteceu.

Embora a opção Build Views seja muito boa, acabei desativando-a, porque esse "erro" sempre aparecia e me deixava incapaz de executar o aplicativo.

Senhor dos Scripts
fonte
2
Obrigado Senhor ... isso pareceu fazer o truque, juntamente com algumas outras sugestões. Agradeço que você reserve um tempo para responder!
Jason Weber
1
Isso estava acontecendo comigo também. Não sei por que. Com certeza, torna a configuração "MvcBuildViews" muito menos útil.
Ken Smith
Existe uma maneira de definir o MvcBuildViews apenas para as configurações do usuário? Como no arquivo webproject.csproj.user?
C. Tewalt
Comecei a receber esse erro depois de instalar a Atualização 2 para o VS 2013. Eu tenho um projeto que possui um site filho de nível superior e aninhado, ambos configurados como aplicativos do IIS. Desativar o MvcBuildViews também resolveu o problema.
Greg Enslow
13

Só para dizer

Se você atualizar (por exemplo, 2008 -> 2010) Um projeto do Visual Studio criará um backup (se você permitir) na solução do projeto que é adicionada à nova solução. O antigo Webconfig é onde o erro apontado acima pode emanar de .

" Arquivo Web.config em uma das subpastas do site que possui um desses elementos de configuração que não podem ser definidos além do nível do aplicativo. " @Benni_mac_b

Para corrigi-lo: basta remover a pasta de backup do projeto e da solução, neste cenário.

RY4N
fonte
Obrigado por essas informações, Ryan .... Eu só tenho o VS 2010. Não tenho muita certeza do que você quer dizer quando diz remover a pasta de backup do projeto e da solução. Mas examinarei mais a sua resposta. Mais uma vez, obrigado por dedicar um tempo para tentar me ajudar! Acabei de postar uma pergunta de acompanhamento aqui: stackoverflow.com/questions/10414751/…
Jason Weber
12

Eu inventei outra razão possível para que isso ocorra.

Eu tinha um aplicativo Web mais antigo construído em 2.0. Eu migrei para uma solução 4.5.

O aplicativo foi criado e depurado muito bem quando estava dentro do Visual Studio, mas quando tentei publicar o aplicativo Web, esse erro ocorreu repetidamente.

Finalmente descobri que o problema era que a Ação de Compilação para o arquivo web.config era "Recurso Incorporado" em vez de "Conteúdo". Além disso, o diretório Copiar para saída foi definido como "Sempre copiar" em vez de "Não copiar". Não sei quando essas configurações foram feitas, mas acredito que estava de volta à versão 2.0 do aplicativo.

A modificação das configurações do arquivo web.config permitiu que a ação Publicar na publicação do Visual Studio 2012 funcionasse perfeitamente.

Tim C
fonte
tentou qualquer outra solução lá fora. este ajudou. Meu projeto foi migrado ao longo do tempo a partir do Visual Studio 2010 a 2015, então talvez o "Sempre Copy" foi o valor padrão em 2010
Andreas Rathmayr
As propriedades do meu web.config estão limitadas a duas: FileName e FullPath; caso contrário, eu verificaria qual era a ação de compilação.
B. Clay Shannon
11

Eu tive o mesmo problema em um projeto MVC. O erro ocorreu quando tentei publicar. A pasta obj deve estar vazia (ou pelo menos não conter nenhuma web.config).

Correr Cleannão funcionou para mim.

Resolvi o problema limpando a objpasta antes de qualquer compilação (a construção do projeto não levará tanto tempo no meu caso).

Descarreguei o projeto e adicionei o seguinte ao destino 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>

Espero que isto ajude

Rik
fonte
7

"É um erro usar uma seção registrada como allowDefinition = 'MachineToApplication' além do nível do aplicativo. Este erro pode ser causado por um diretório virtual não estar configurado como um aplicativo no IIS."

Eu tive esse problema no VS.NET. Aconteceu que quando eu estava configurando algumas transformações de configuração, defini por engano a propriedade do arquivo Web.config "Copiar sempre". Normalmente, defino meus arquivos de transformação como "Copiar sempre", mas deixo o arquivo raiz web.config como "Não copiar".

Cuidado, pois alterar as propriedades do web.config também altera todas as transformações aninhadas.

Então, para corrigir:

1) Altere web.config para "Não copiar"

2) Opcionalmente, se você estiver usando transformações de configuração, defina-as como "Copiar sempre"

3) Exclua as pastas obj e bin da solução (elas podem não estar visíveis; portanto, selecione o nó do projeto no Solution Explorer e clique no botão "Mostrar todos os arquivos" da barra de ferramentas.

4) Publicar

Trabalhou para mim.

ben
fonte
5

Eu experimentei esse erro apenas durante a publicação do aplicativo.

As propriedades dos arquivos web.config (e transformações) foram definidas como:

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

A solução foi alterar as configurações para:

  • Build Action - Content
  • Copy to Output - Do not Copy
Hugo
fonte
4

Também tive esse problema e surgiu depois que usei o Assistente de publicação para publicar meu site na Web.

Depois de muita pesquisa, deparei-me com este relatório de bug no site do Connect, https://connect.microsoft.com/VisualStudio/feedback/details/779737/error-allowdefinition-machinetoapplication-beyond-application-level

Um representante da MS respondeu e, além de explicar por que esse problema ocorreu ao publicar, ele também incluiu uma solução temporária que corrigiu o problema para mim.

Pat Long - Munkii Yebee
fonte
4

Exclua e crie o diretório virtual novamente. Clique com o botão direito e converta o diretório virtual em " Aplicativo "

sudhAnsu63
fonte
3

Clique no Web.configarquivo do Solution Explorer e clique com o botão direito do mouse em "Propriedades" e mude para "Copiar para o diretório de saída: Não copie".

insira a descrição da imagem aqui

nPcomp
fonte
1

Para mim, o motivo foi que a pasta obj estava na pasta do site e vários web.config apareceram após a criação de configurações diferentes. Resolvi o problema no vs2012 movendo a pasta obj para fora do site. Para fazer isso, adicionei manualmente (no bloco de notas) $ (SolutionDir) \ Obj \ $ (Configuration) a todas as configurações no arquivo de projeto do site.

Mikhail.Gorbulsky
fonte
1

Eu estava tendo o mesmo problema quando publicava o site, se eu construí-lo, não tenho problemas, mas durante a publicação, recebo este erro terrível:

"É um erro usar uma seção registrada como allowDefinition = 'MachineToApplication' além do nível do aplicativo. Esse erro pode ser causado por um diretório virtual não estar configurado como um aplicativo no IIS"

Eu tentei tudo o que foi declarado aqui neste post sem nenhum recurso. O que funcionou para mim foi apenas criar um novo perfil de publicação exatamente igual ao que eu estou usando e que funciona bem, não receba o erro com o novo perfil, mas faça com o antigo. Não tenho certeza qual é a diferença, mas pelo menos posso publicar meu projeto MVC.

Espero que isso ajude alguém !!

FabianVal
fonte
1

Aqui está outro motivo: se você copiar todo o seu aplicativo Web em uma de suas próprias subpastas, você receberá esse erro. Eu consegui fazer isso em um site antigo ao copiar de uma máquina para outra - fui solicitado a olhar para o site após um intervalo de cerca de 2 anos e ocorreu o erro. Demorou um pouco para descobrir - como eu não tinha vários arquivos de configuração.

Martin Smellworse
fonte
1

Eu tive esse problema e resolvi limpando minha solução de montagens antigas etc.

de vs: Build> Solução Limpa

depois reconstrua.

kennydust
fonte
1

O Windows inicia -> abra Sites -> IIS -> clique com o botão direito do mouse em seu site -> Gerenciar Site -> Configuração Avançada -> procure Caminho Físico -> tente selecionar a subpasta da seleção atual.

a lógica é que o arquivo de configuração da web dentro da subpasta está tentando fazer alterações e isso não é permitido, deve ser a pasta selecionada: http://scottonwriting.net/sowblog/archive/2010/02/17/163375.aspx

Subodh Pradhan
fonte
1

Também recebo esse erro ao tentar implantar um subsite no site.

A solução é:

  1. Você deve remover algumas guias de configuração como: perfil , associação , roleManager , sessionState na sub web.config
  2. Altere a autenticação para nenhum como: <authentication mode="None" />
  3. E vá para o IIS, clique com o botão direito do mouse na subpasta - > Adicionar Aplicativo.
  4. Redefina o IIS para resolver esse problema.

Se houver outro problema, não hesite em me enviar um ping, talvez eu encontre ajuda.

Trung
fonte
1

Recebi esse erro no localhost no Visual Studio 2017 e uma simples reinicialização do Visual Studio resolveu o problema.

Sei que esse problema também pode ser causado por ter mais de um web.config; um dentro de uma subpasta, por exemplo. se você tiver vários arquivos web.config intencionalmente para outro aplicativo: verifique se o diretório não está sendo visto como um diretório virtual.

Josh Harris
fonte
0

Certifique-se de não cair na armadilha de acessar o site local errado via localchost / mysite.test, que deve ser mysite.test, o que causará esse erro.

Quando você acessa seu site como localhost / dir_name, nesse caso, o seu web.conf fica abaixo do nível da raiz e, portanto, esse erro.

Hammad Khan
fonte
0

Eu estava migrando aplicativos e o aplicativo tinha vários aplicativos (vários web.configs) dentro dele. O que fiz foi acessar o IIS e clicar com o botão direito do mouse nas subpastas, depois em "Converter em aplicativo" e funcionou.

sojim2
fonte
0

Eu recebi esse erro de forma diferente de todos os outros:

Eu estava migrando do vs2010 com projeto de implantação da web para o vs2012 e um novo perfil de publicação na web.

Criei um novo projeto de publicação na web no vs2012 para publicar no sistema de arquivos (temos um construtor de instalador separado, este é um aplicativo comercial) e estava publicando em uma pasta que estava dentro do projeto da web existente, que está vinculado ao IIS.

Isso causou o erro durante a publicação, o que me intrigou a princípio porque estava publicando no sistema de arquivos, não no IIS (pensei).

A solução foi alterar a publicação para a pasta para fora do projeto da web.

JohnC
fonte
0

Foi bom, localhostmas quando publiquei uma versão no servidor, iniciei o mesmo erro em poucas páginas. Depois limpei a solução e reconstruí-a e publiquei, as coisas foram corrigidas.

Baqer Naqvi
fonte
0

Às vezes, a resposta simples é a melhor. Eu tinha dois arquivos web.config no meu projeto. Aquele no nível principal é onde eu precisava fazer a alteração para lidar com o tempo limite da minha sessão (o que desencadeou esse problema). Eu tinha um arquivo de configuração separado no diretório Razor Views, que tinha configurações para o Razor e suas visualizações. Eu estava adicionando uma seção lá (não no nível do aplicativo!). Sem perceber, eu tinha dois arquivos web.config separados, tentei de tudo, exceto procurando o óbvio.

Guy Schalnat
fonte
0

meu erro foi acidentalmente copiar colando um web.config dentro de outra pasta no servidor web

krilovich
fonte
0

Eu recebi esse erro quando esqueci de converter o projeto publicado em um aplicativo no IIS.

eaglei22
fonte