Atualmente, tenho dois projetos MVC3 não relacionados hospedados online.
Um funciona bem, o outro não funciona, dando-me o erro:
Foram encontrados vários tipos que correspondem ao controlador chamado 'Início'. Isso pode acontecer se a rota que atende a essa solicitação ('{controller} / {action} / {id}') não especificar namespaces para procurar um controlador que corresponda à solicitação.
Se for esse o caso, registre essa rota chamando uma sobrecarga do método 'MapRoute' que usa o parâmetro 'namespaces'.
O funcionamento do meu hoster é que ele me dá acesso ao FTP e nessa pasta eu tenho duas outras pastas, uma para cada um dos meus aplicativos.
ftpFolderA2 / foo.com
ftpFolderA2 / bar.com
O foo.com funciona bem, publico meu aplicativo no meu sistema de arquivos local, depois o conteúdo do FTP e ele funciona.
Quando carrego e tento executar o bar.com, o problema acima é acionado e impede que eu use meu site. Enquanto isso, foo.com ainda funciona .
O bar.com está pesquisando nos controladores EM TODA PARTE dentro do ftpFolderA2 e é por isso que está encontrando outro HomeController
? Como posso dizer para ele procurar apenas na pasta Controller como deveria?
Fatos:
- Não usando áreas. Estes são dois projetos completamente não relacionados. Coloco cada projeto publicado em cada pasta respectiva. Nada chique.
- Cada projeto possui apenas 1 HomeController.
Alguém pode confirmar que este é o problema?
fonte
Respostas:
Essa mensagem de erro geralmente ocorre quando você usa áreas e tem o mesmo nome de controlador dentro da área e da raiz. Por exemplo, você tem os dois:
~/Controllers/HomeController.cs
~/Areas/Admin/Controllers/HomeController.cs
Para resolver esse problema (como a mensagem de erro sugere), você pode usar espaços para nome ao declarar suas rotas. Então, na principal definição de rota em
Global.asax
:e no seu
~/Areas/Admin/AdminAreaRegistration.cs
:Se você não estiver usando áreas, parece que seus dois aplicativos estão hospedados no mesmo aplicativo ASP.NET e ocorrem conflitos porque você tem os mesmos controladores definidos em diferentes namespaces. Você precisará configurar o IIS para hospedar esses dois como aplicativos ASP.NET separados, se desejar evitar esse tipo de conflito. Peça isso ao seu provedor de hospedagem, se você não tiver acesso ao servidor.
fonte
Aqui está outro cenário em que você pode enfrentar esse erro. Se você renomear seu projeto para que o nome do arquivo do assembly seja alterado, é possível que você tenha duas versões do seu assembly ASP.NET, que reproduzirão esse erro.
A solução é ir para a sua
bin
pasta e excluir as DLLs antigas. (Tentei "Reconstruir projeto", mas isso não os excluiu, por isso, verifique sebin
eles se foram)fonte
No MVC4 e no MVC5, é um pouco diferente, use o seguinte
/App_Start/RouteConfig.cs
e em áreas
fonte
Assista a isso ... http://www.asp.net/mvc/videos/mvc-2/how-do-i/aspnet-mvc-2-areas
Então esta foto (espero que você goste dos meus desenhos)
fonte
O que os outros disseram está correto, mas para aqueles que ainda enfrentam o mesmo problema:
No meu caso, aconteceu porque copiei outro projeto e o renomeei para outra coisa, MAS os arquivos de saída anteriores na
bin
pasta ainda estavam lá ... E, infelizmente, pressionandoBuild -> Clean Solution
após renomear projeto eNamespaces
não os remove ... então excluí- los manualmente resolveu meu problema!fonte
na sua
bin/
pasta do projetoverifique se você possui apenas seu PROJECT_PACKAGENAME.DLL
e remova ANOTHER_PROJECT_PACKAGENAME.DLL
que pode aparecer aqui por engano ou você simplesmente renomeia seu projeto
fonte
Verifique a pasta bin se houver outro arquivo DLL que possa estar em conflito com a classe homeController.
fonte
Outra solução é registrar um espaço para nome padrão no ControllerBuilder. Como tínhamos muitas rotas em nosso aplicativo principal e apenas uma única rota genérica em nossas áreas (onde já estávamos especificando um espaço para nome), achamos que essa é a solução mais fácil:
fonte
Mesmo que você não esteja usando áreas, você ainda pode especificar no seu RouteMap qual namespace usar
Mas parece que o problema real é a maneira como seus dois aplicativos são configurados no IIS
fonte
Acabei de ter esse problema, mas somente quando publiquei no meu site, na depuração local, ele correu bem. Eu descobri que tinha que usar o FTP do meu host da web e ir para o meu diretório de publicação e excluir os arquivos na pasta BIN, excluí-los localmente não fez nada quando publiquei.
fonte
Pode haver outro caso com o Áreas, mesmo que você tenha seguido todas as etapas do roteamento em Áreas (como fornecer namespaces na tabela de roteamento global), que é:
Por exemplo:
Feito isso:
Ao invés de:
fonte
Você também pode obter o erro 500 se adicionar seu próprio assembly que contém o ApiController substituindo GetAssemblies do DefaultAssembliesResolver e ele já estiver na matriz da base.GetAssemblies ()
Caso em questão:
se o código acima estiver no mesmo assembly que o seu Controller, esse assembly estará na lista duas vezes e gerará um erro 500, pois a API da Web não sabe qual usar.
fonte
se você quiser resolvê-lo automaticamente .. você pode usar o aplicativo de forma apropriada, basta adicionar o seguinte código:
fonte
Tenho o mesmo problema e nada ajudou. O problema é que, na verdade, não tenho duplicatas, esse erro aparece após a troca do namespace do projeto de
MyCuteProject
paraMyCuteProject.Web
.No final, percebi que a fonte do erro é um
global.asax
arquivo - marcação XML, não.cs
-codebehind. Verifique o espaço para nome nele - isso me ajudou.fonte
Acabei de excluir a pasta 'Bin' do servidor e copiar minha lixeira para o servidor, e meu problema foi resolvido.
fonte
No Route.config
namespaces: new [] {"Appname.Controllers"}
fonte
Descobrimos que ocorreu esse erro quando houve um conflito em nossa compilação que apareceu como um aviso.
Não obtivemos os detalhes até aumentarmos o Visual Studio -> Ferramentas -> Opções -> Projetos e soluções -> Construir e executar -> MSBuild construir a verbosidade da saída do projeto para Detalhada.
Nosso projeto é um aplicativo da web .net v4 e houve um conflito entre System.Net.Http (v2.0.0.0) e System.Net.Http (v4.0.0.0). Nosso projeto referenciou a versão v2 do arquivo de um pacote (incluído usando o nuget). Quando removemos a referência e adicionamos uma referência à versão v4, a construção funcionou (sem avisos) e o erro foi corrigido.
fonte
Outra variação desse erro ocorre quando você usa o recarregador e algumas opções de refatoramento "automáticas" que incluem a alteração do nome do namespace. Isso é o que aconteceu comigo. Para resolver problemas com esse tipo de cenário, exclua a pasta
bin
fonte
Clique com o botão direito do mouse no projeto e selecione limpar o projeto. Ou então esvazie completamente o diretório bin e, em seguida, recrie novamente. Isso deve evitar qualquer sobra de montagens de compilações anteriores
fonte
Em algum momento de um único aplicativo, esse problema também ocorre. Nesse caso, marque essas caixas de seleção ao publicar seu aplicativo
fonte
Se isso puder ajudar outros, também enfrentarei esse erro. O problema foi causado pela referência incorreta no meu site. Por motivos desconhecidos, meu site estava se referindo a outro site, na mesma solução. E depois que removi essa referência ruim, a coisa começou a funcionar corretamente.
fonte
Se você estiver trabalhando no Episerver ou em outro CMS baseado em MVC, poderá descobrir que esse nome de controlador específico já foi reivindicado.
Isso aconteceu comigo ao tentar criar um controlador chamado
FileUpload
.fonte
Eu estava enfrentando o problema semelhante. e o principal motivo foi que eu tinha o mesmo controlador em duas áreas diferentes. uma vez que eu remover o deles está funcionando bem.
Eu tenho isso será útil para você.
fonte
Eu tenho dois projetos em uma solução com o mesmo nome de controlador. Removi a segunda referência do projeto no primeiro projeto e o problema foi resolvido
fonte
Descobri que esse erro pode ocorrer no site tradicional do ASP.NET quando você cria o Controller no diretório não App_Code (às vezes o Visual Studio impede isso).
Ele define o tipo de arquivo como "Compilar", enquanto qualquer código adicionado a "App_Code" é definido como "Conteúdo". Se você copiar ou mover o arquivo para App_Code, ele ainda será definido como "Compilar".
Eu suspeito que ele tenha algo a ver com a operação do Projeto do site, pois os projetos do site não têm nenhuma operação de compilação. Limpar a pasta bin e alterar para "Conteúdo" parece corrigi-lo.
fonte