Erro: allowDefinition = 'MachineToApplication' além do nível do aplicativo

193

Eu baixei o projeto online no ASP.Net. Ao executar o aplicativo, recebo um erro

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

Quais alterações devo fazer no web.config ou em outro local para que isso funcione?

Deepali
fonte
53
Nenhuma das respostas encontradas na web funcionou para mim. Meu problema foi resolvido mostrando todos os arquivos / pastas ocultos e excluindo a objpasta.
O homem de muffin
6
Esse problema ainda se manifesta no VS2012. Abri um relatório de erro com a Microsoft. Qualquer pessoa que esteja enfrentando o problema, por favor, atualize o relatório de bug connect.microsoft.com/VisualStudio/feedback/details/779737/…
Eric J.
4
excluir a pasta obj também resolveu esse problema para mim. obrigado @Nick! (desculpe para o renascimento)
Jordan Wayne Crabb
SOLUÇÃO AQUI: stackoverflow.com/questions/9300927/…
benni_mac_b
no meu caso, o web.config extra em uma subpasta causa esse problema. Quando eu remover essa web.config extra que o erro se foi
Dio Phung

Respostas:

96

Acabei de encontrar essa "delícia". Parece se apresentar logo após a publicação de um aplicativo Web no modo de lançamento.

A única maneira de contornar consistentemente o problema que encontrei é seguir esta lista de verificação:

  1. Solução limpa enquanto sua solução está configurada no modo Liberar.
  2. Solução limpa enquanto sua solução está configurada no modo Debug.
  3. Crie enquanto sua solução está configurada no modo de Depuração.
John Reilly
fonte
18
Apenas resposta que funcionou para mim também. Eu tinha muitos outros erros esperando por mim depois disso, mas eles não estavam relacionados. Eu cheguei aqui definindo MvcBuildViewspara true.
Benjamin
+1 BTW: Eu acho que a razão pela qual isso funcionou para mim foi que a versão mais recente que tive foi o Debug . Abri a solução, corrigi um erro e tentei criar no modo R Release . A limpeza no Release não funcionou, mas a limpeza no Debug funcionou. (Provavelmente uma combinação dos 2 era o que era necessário, ou seja, limpe quaisquer referências antigas às DLLs, seja Debug ou Release ).
21713 Scotty.NET
4
Eu fiz um limpo , então foi para propriedades * do projeto -> Web -> Criar Virtual Directory e, em seguida, a questão foi resolvida
gldraphael
Uma limpeza e reconstrução no modo de depuração são tudo o que é necessário para mim. Não há necessidade de alternar entre lançamento e depuração. Mas sim, o CLEAN é muito importante. Esse é o cerne da questão.
markaaronky
1
O Clean não está disponível no meu caso, o que nunca vi antes. Este é um aplicativo VB.NET muito antigo que herdei de um ex-colega.
tnk479 25/06/19
82

Basta encontrar este post e isso estava acontecendo comigo.
Apenas Cleano projeto e o erro desaparecem. (deve ser um bug do VS2010)

Eduardo Molteni
fonte
esta solução se você receber isso como um erro no Visual Studio.
Gideon
22
Às vezes, limpar não limpa a objpasta. Às vezes, isso também precisa ser excluído.
Jaypeagi 22/03
1
Objetos limpos e excluídos não funcionaram. A solução de Johnny Reilly funcionou para mim.
Benjamin
Eu tive que correr limpo nos modos de depuração e liberação para me livrar disso. Executá-lo apenas para depuração não parecia resolver o problema.
Juha Palomäki
O mesmo problema ainda existe no VS2013SP1. Uma limpeza simples me permite implantar novamente.
Brian Knoblauch
25

Acabei de ter esse problema ao criar uma segunda versão do meu site. Não aconteceu quando eu o construí pela primeira vez.

Acabei de excluir as pastas bin e obj, execute uma solução limpa e criei novamente, desta vez sem nenhum problema.

xiecs
fonte
2
Esta é a única solução que funcionou para mim no VS Express 2012 para Web. Além disso, só comecei a receber esse erro depois de criar uma configuração de solução e adicionei o MvcBuildViews definido como true ao seu PropertyGroup na fonte .csproj.
Jeremy Cozinhe
20

Nenhum. Você precisa configurar o diretório em que colocou o site como um aplicativo da Web no IIS .


fonte
1
Embora tecnicamente seja uma mudança "em outro lugar para fazer esse trabalho";)
Zhaph - Ben Duguid
2
e esta é a solução se você receber isso como um erro no seu aplicativo da web! = P
gideon 22/11
Eu já estava configurado como um aplicativo. A solução de Johnny Reilly funcionou no meu caso.
Benjamin
Estou apenas tentando fazer com que o aplicativo Webforms do modelo funcione. É bom no host local, mas não em um servidor na LAN. Esta solução funcionou para mim: VS2015 CE, Windows Server 2008 na minha LAN. Usei esta página da Microsoft para explicar o que fazer no IIS: support.microsoft.com/en-gb/kb/917413 . Nenhuma alteração no código do modelo.
Tim
16

Este erro ocorre quando você tenta abrir um projeto como um site. A maneira mais fácil de determinar se você criou um site ou projeto é verificar a pasta da solução (ou seja, onde você salvou o seu código) e verificar se você tem um arquivo * .sln no diretório raiz, se tiver, você criou um projeto.

Só para adicionar, encontrei esse erro agora quando tentei abrir um projeto que criei um tempo atrás, selecionando "Arquivo", "Abrir site" nos menus do Visual Studio, enquanto eu deveria ter selecionado "Arquivo", "Abrir projeto" em vez de. Fiquei facepalmed assim que percebi :)

Pete
fonte
este foi o meu problema também
mgrenier
13

No Visual Studio 2013, lutei com isso por um tempo e é praticamente fácil de resolver basta seguir o que as exceções dizem "diretório virtual não está sendo configurado como um aplicativo no IIS"

No meu caso eu tinha WebService plantado dentro IIS websitede modo

  1. Abri o site no gerenciador do IIS
  2. clique com o botão direito na pasta WCF
  3. clicou Convert to Application
  4. e depois enviado com Ok

O WCF está de volta e funcionando.

Marek
fonte
1
Eu estava enfrentando esse problema quando mudei meu aplicativo para o site padrão. O ponto 3 fez o truque para resolver meu problema.
bikram s.
Isso funcionou para mim quando nos mudamos para um novo servidor web. Depois de fazer uma "Converter em aplicativo", o símbolo da pasta foi alterado e o aplicativo da Web do ASP.NET MVC começou a trabalhar nesse servidor da web.
Greg Barth
11

O erro sugere que o código que você está usando espera que um diretório virtual seja configurado no IIS.

Procure a documentação e adicione o diretório virtual necessário. Deve ser um diretório que contenha um web.config(não o diretório raiz).

Oded
fonte
8
A remoção de um segundo web.config em um diretório inferior resolveu o problema para mim.
Lucas B
10
Um dos meus homens estava <authentication mode="Forms"><forms name="..." loginUrl="~/Login/Login/" timeout="2880" /></authentication>com ele Web.configna Viewspasta do tronco, o que causou esse problema.
Serj Sagan
10

Se você possui um projeto MVC com visões ativadas, uma das soluções é excluir a pasta obj antes da compilação. Adicionar ao arquivo do projeto:

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

Aqui está o artigo: Como remover a pasta bin e / ou obj antes da compilação ou implantação

Xamã
fonte
8

Uma alteração recente do web.config pode estar no arquivo web.config errado.

Uma <machineKey...>propriedade foi adicionada ao Views / web.config . Não importa quantas limpezas e reconstruções o erro permaneça. A correção foi mover a propriedade para a raiz /web.config .

SushiGuy
fonte
Acidentalmente, copiámos o Web.config pai para a pasta / Views. Coloque a versão original, muito menor, da pasta Views, e o site funcionou novamente.
Grandizer
6

se você encontrar esse erro

É 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

SOLUÇÃO
Eu tive o mesmo problema com o VS 2012. Resolvi isso

  1. Descarregue seu projeto atual
  2. edite seu arquivo .csproj
  3. Encontre este <MvcBuildViews>false</MvcBuildViews>
  4. Em vez de false, altere o valor para true
  5. Carregue novamente seu projeto e você não deverá ter mais esse erro

Se você tiver, uma solução é excluir o conteúdo da pasta obj no projeto gerado pelo compilador.

visar_uruqi
fonte
18
Isso é estranho, definindo MvcBuildViewsa trueé como eu tenho o erro no primeiro lugar.
Benjamin
Também comecei a receber a mensagem de erro depois de alterar o MvcBuildViews para true. Eu me livrei da mensagem de erro alterando o valor novamente para false.
Juha Palomäki
3
Eu fiz uma "solução limpa" nos modos de liberação e depuração e agora a compilação também está trabalhando com #<MvcBuildViews>true</MvcBuildViews>
Juha Palomäki
@ JuhaPalomäki super doce! Obrigado.
Haroon
Eu tive exatamente a situação oposta à @visar_uruqi. Quero dizer na minha .csproj arquivo eu tinha as MvcBuildViews opção definida como verdadeira e quando eu definido como falso o erro foi omitido (não mostrado).
Bronek
5

No meu caso, o problema apareceu somente depois que publiquei o projeto no subdiretório. Devido à minha falta de conhecimento, coloquei meu web_publishsubdiretório dentro do web_projectdiretório.

É claro que web_publishcontém também os mesmos Web.configque o projeto contém. No entanto, o web_projectnão sabe que meu web_publishdeve ser evitado ao pesquisar Web.configs nos subdiretórios aninhados. Dessa forma, os Web.configs foram duplicados e o erro apareceu.

A solução foi colocar o meu web_publishem outro lugar.

pepr
fonte
5

No meu caso, havia uma pasta "Backup" que continha outra cópia de todo o site. Isso significava outro web.confige, portanto, a compilação falhou com esse erro. Excluí a pasta "Backup", fiz uma solução limpa nas versões de depuração e lançamento e o erro desapareceu.

druida
fonte
Eu tive uma situação semelhante, alguém criou uma subpasta "Publicada" na raiz do site no disco (este é um projeto Web antigo, um dos que não têm arquivo de solução) e tinha um Web.config. O erro ocorreu quando o Visual Studio tentou compilá-lo, e nenhuma quantidade de Limpeza / Exclusão de pastas "obj" etc corrigiu isso, é claro. Eu vi algumas instâncias desse erro, e é quase sempre uma duplicata esconderijo Web.config em algum lugar ... (realmente pobre mensagem de erro também!)
Detalhe
4

No meu caso,

Solução contém 6 projetos, 1 principal e 5 subdiretórios. todos os subdiretórios com web.config.

Ao executar qualquer página em subdiretórios, eu estava recebendo o mesmo erro.

Eu removi esta linha do web.config,

<authentication mode="Windows"/>

isso funcionou para mim.

p_champ
fonte
Que linha você removeu?
Mark Berry
A linha estava lá, mas não foi exibida devido a algum problema de travessão, eu acho. Eu editei e colei o código em um bloco de código, ele mostra agora. Por favor, verifique e deixe-me saber se eu poderia ajudar em alguma coisa.
p_champ
Obrigado, isso confirma que também estava falhando para mim. Eu só tenho um site, então eu o contornei abrindo como um site da Web em vez de um projeto.
Mark Berry
4

Limpe seu projeto Remova a pasta / obj (provavelmente usando publicar e implantar? - há um bug nela)

NicoJuicy
fonte
Única solução que funcionou para mim. Cheguei aqui definindo <MvcBuildViews> true </MvcBuildViews>.
Paul
3

Meu problema foi que eu publiquei acidentalmente meu serviço da web em um local pré-concluído em uma nova instalação do VS2010.

Eu publiquei em uma pasta chamada PreCompiledWeb , e a presença do web.config suspeito que tenha estragado tudo.

Simplesmente coloquei uma nuked na pasta e atualizei o projeto.

Ao clicar duas vezes nesse erro, levei-me ao arquivo web.config errado, que me deu uma dica.

gaijintendo
fonte
2

Pode ser o problema da versão, como você baixa o projeto do .Net framework 2.0 e deseja abri-lo no VS2008. Você precisará atualizar para a versão mais recente e o VS criará o backup da pasta no mesmo diretório raiz. obtenha a resposta aqui .

gofor.net
fonte
A resposta de ranganh aqui fornece mais alguns detalhes.
Mark Berry
2

Eu tive esse erro ao criar a solução com o Projeto de Implantação da Web criado em minha solução. Eu resolvo o erro excluindo a pasta em que o Projeto de Implantação da Web foi criado. Esta pasta é especificada no atributo "Pasta do Projeto" das propriedades do WDP

Ilya
fonte
2

Excluir pastas bin e obj. Em seguida, reconstrua a solução.

rovsen
fonte
Para o File Explorer, use a consulta de pesquisa "obj" type: = folder e "bin" kind: = folder para localizar / excluir essas pastas. Isso funcionou para mim.
31718 Robert J. Good
2

Aparentemente, havia dois arquivos web.config na minha solução. Estou usando o MVC4 e havia outro arquivo de configuração em Views e eu estava fazendo a alteração no arquivo errado. Corrigido lá me ajudou.

Mas você sempre pode alterar o redirecionamento / rota padrão no arquivo global.asax.

Gautam Beri
fonte
1

Provavelmente você tem uma pasta de projeto sub asp.net dentro da pasta do projeto que não está configurada como diretório virtual. Configure o projeto para ser executado no IIS.

funwithcoding
fonte
1

Eu tenho esse problema mais frequente se "true" estiver ativado no arquivo do projeto.

  1. Definir falso

Como Jonny diz:

  1. Solução limpa enquanto sua solução está configurada no modo Liberar.
  2. Solução limpa enquanto sua solução está configurada no modo Debug.
  3. Crie enquanto sua solução está configurada no modo de Depuração.
Riccardo Bassilichi
fonte
1

Eu tinha um projeto que não queria ser um aplicativo da web, queria que fosse uma pasta. A resposta foi excluir o arquivo web.config completamente. Ele pertence apenas à raiz de um aplicativo.

Rob Sedgwick
fonte
1

Se você enfrentar esse problema ao publicar seu site ou aplicativo em algum servidor, a solução simples que usei é converter a pasta que contém arquivos em aplicativos da web.

ehabh86
fonte
4
Olá, bem-vindo ao Stack Overflow! Você pode expandir sua resposta? Você poderia explicar como converter a pasta em um aplicativo Web? Isso ajudará outras pessoas a entender melhor sua resposta.
Jesse
1
No Gerenciador do IIS, no painel Conexões à direita, clique com o botão direito do mouse no diretório nos sites que você criou (ou Site Padrão) e escolha Convert to Application.
Aske B. #
1

Eu tenho o mesmo problema no VS 2013 depois de publicar meu projeto no modo de depuração. O problema foi resolvido removendo obj / files

Grigory Bushuev
fonte
1

Eu tenho um projeto de site.

No meu caso, mudei o arquivo de solução para outro caminho e isso causou o problema. Eu o restaurei no local anterior e o problema desapareceu.

Daniel Silva
fonte
1

Para quem ainda procura, minha solução foi excluir as pastas bin e obj e reiniciar o visual studio parece corrigi-lo.

Ricky G
fonte
1

Via Visual Studio, publiquei um serviço WCF via FTP em um servidor externo. Funcionou bem localmente e ao publicar em um servidor interno, mas não no externo. A solução foi publicar sem fornecer um Site Path (em outras palavras, publique diretamente na raiz do diretório virtual).

Não sei ao certo por que funcionou, pois eu já havia tentado mover os arquivos para a raiz através de um cliente FTP externo - entre muitas outras tentativas, incluindo todas as listadas aqui. Talvez tenha sido algo com o perfil de publicação, como foi para FabianVal . Mas não estou mais com vontade de testar neste momento, pois estou com pressa de me atualizar depois de todos os dias desperdiçados com esse problema.

Aske B.
fonte
0

dica 1: limpe e depois reconstrua.

dica 2: basta fechar o VS e abrir novamente.

dica 3: o projeto baixado pode estar dentro de outra subpasta ... abra a pasta que contém os arquivos .net.

c: / demo1 / demo / (todos os arquivos)

Você deve abrir a demo de vs ... não demo1.

Aprendiz
fonte
0

Eu tentei todas as soluções acima, mas nenhuma delas funcionou para o meu problema. (Tenho certeza de que existem 1000 soluções para esse problema) Para o meu cenário, eu estava tentando publicar meu serviço Web WCF que eu tinha em teste na produção.

No entanto, não percebi que na produção somos apenas HTTPS, o que significa que redirecionamos tudo para HTTPS. Acontece que eu estava apontando para o serviço via HTTP em vez de HTTPS, causando o erro. A solução nesse cenário foi simplesmente alterar o protocolo de endereço para HTTPS em vez de HTTP.

Espero que ajude uma pobre alma por aí tentando descobrir esse problema.

ROFLwTIME
fonte