Actualmente tengo dos proyectos MVC3 no relacionados alojados en línea.
Uno funciona bien, el otro no funciona, dándome el error:
Se encontraron varios tipos que coinciden con el controlador llamado 'Inicio'. Esto puede suceder si la ruta que atiende esta solicitud ('{controller} / {action} / {id}') no especifica espacios de nombres para buscar un controlador que coincida con la solicitud.
Si este es el caso, registre esta ruta llamando a una sobrecarga del método 'MapRoute' que toma un parámetro 'espacios de nombres'.
La forma en que funciona mi host es que me da acceso FTP y en esa carpeta tengo otras dos carpetas, una para cada una de mis aplicaciones.
ftpFolderA2 / foo.com
ftpFolderA2 / bar.com
foo.com funciona bien, publico mi aplicación en mi sistema de archivos local, luego el contenido de FTP y funciona.
Cuando subo e intento ejecutar bar.com, el problema anterior se dispara y me impide usar mi sitio. Todo mientras foo.com todavía funciona .
¿Bar.com está buscando desde controladores EN TODAS PARTES dentro de ftpFolderA2 y es por eso que está buscando otro HomeController
? ¿Cómo puedo decirle que solo se vea en la carpeta Controlador como debería?
Hechos:
- No usar áreas. Estos son dos proyectos COMPLETAMENTE no relacionados. Coloco cada proyecto publicado en cada carpeta respectiva. Nada sofisticado.
- Cada proyecto solo tiene 1 HomeController.
¿Alguien puede confirmar que este es el problema?
fuente
Respuestas:
Este mensaje de error a menudo ocurre cuando usa áreas y tiene el mismo nombre de controlador dentro del área y la raíz. Por ejemplo, tienes los dos:
~/Controllers/HomeController.cs
~/Areas/Admin/Controllers/HomeController.cs
Para resolver este problema (como lo sugiere el mensaje de error), puede usar espacios de nombres al declarar sus rutas. Entonces, en la definición de ruta principal en
Global.asax
:y en tu
~/Areas/Admin/AdminAreaRegistration.cs
:Si no está utilizando áreas, parece que ambas aplicaciones están alojadas dentro de la misma aplicación ASP.NET y se producen conflictos porque tiene los mismos controladores definidos en diferentes espacios de nombres. Tendrá que configurar IIS para alojar esos dos como aplicaciones ASP.NET separadas si desea evitar este tipo de conflictos. Pídale esto a su proveedor de alojamiento si no tiene acceso al servidor.
fuente
Aquí hay otro escenario en el que podría enfrentar este error. Si cambia el nombre de su proyecto para que cambie el nombre del archivo del ensamblado, es posible que tenga dos versiones de su ensamblado ASP.NET, lo que reproducirá este error.
La solución es ir a su
bin
carpeta y eliminar los dlls antiguos. (Intenté "Reconstruir proyecto", pero eso no los eliminó, así que asegúrese de verificarbin
que se hayan ido)fuente
En MVC4 y MVC5 es un poco diferente, use el siguiente
/App_Start/RouteConfig.cs
y en áreas
fuente
Mira esto ... http://www.asp.net/mvc/videos/mvc-2/how-do-i/aspnet-mvc-2-areas
Entonces esta foto (espero que te gusten mis dibujos)
fuente
Lo que otros dijeron es correcto, pero para aquellos que aún enfrentan el mismo problema:
en mi caso sucedió porque copié otro proyecto y lo renombré a otra cosa PERO los archivos de salida anteriores en la
bin
carpeta todavía estaban allí ... Y desafortunadamente, presionéBuild -> Clean Solution
después de cambiar el nombre del proyecto yNamespaces
no los elimina ... ¡así que eliminarlos manualmente resolvió mi problema!fuente
en tu
bin/
carpeta de proyectoasegúrese de tener solo su PROJECT_PACKAGENAME.DLL
y elimine ANOTHER_PROJECT_PACKAGENAME.DLL
que puede aparecer aquí por error o simplemente renombra tu proyecto
fuente
Verifique la carpeta bin si hay otro archivo dll que pueda tener conflictos con la clase homeController.
fuente
Otra solución es registrar un espacio de nombres predeterminado con ControllerBuilder. Dado que teníamos muchas rutas en nuestra aplicación principal y solo una ruta genérica en nuestras áreas (donde ya estábamos especificando un espacio de nombres), encontramos que esta es la solución más fácil:
fuente
Aunque no esté utilizando áreas, puede especificar en su RouteMap qué espacio de nombres usar
Pero parece que el problema real es la forma en que sus dos aplicaciones están configuradas en IIS
fuente
Acabo de tener este problema, pero solo cuando publiqué en mi sitio web, en mi depuración local funcionó bien. Descubrí que tenía que usar el FTP de mi webhost e ir a mi directorio de publicación y eliminar los archivos en la carpeta BIN, eliminarlos localmente no hizo nada cuando publiqué.
fuente
Puede haber otro caso con Áreas, incluso si ha seguido todos los pasos de enrutamiento en Áreas (como dar espacios de nombres en la tabla de enrutamiento global), que es:
P.ej:
Hecho esto:
En vez de:
fuente
También puede obtener el error 500 si agrega su propio ensamblado que contiene el ApiController anulando GetAssemblies de DefaultAssembliesResolver y ya está en la matriz de base.GetAssemblies ()
Caso en punto:
Si el código anterior está en el mismo ensamblado que su Controlador, ese ensamblaje estará en la lista dos veces y generará un error 500 ya que la API web no sabe cuál usar.
fuente
si desea resolverlo automáticamente ... puede usar el conjunto de aplicaciones simplemente agregue el siguiente código:
fuente
Tengo los mismos problemas y nada ayudó. El problema es que en realidad no tengo ningún duplicado, este error aparece después de cambiar el espacio de nombres del proyecto de
MyCuteProject
aMyCuteProject.Web
.Al final me di cuenta de que la fuente de error es un
global.asax
archivo: marcado XML, no.cs
-codebehind. Verifique el espacio de nombres en él, eso me ayudó.fuente
Acabo de eliminar la carpeta 'Bin' del servidor y copié mi bin al servidor, y mi problema se resolvió.
fuente
En Route.config
espacios de nombres: nuevo [] {"Appname.Controllers"}
fuente
Descubrimos que recibimos este error cuando hubo un conflicto en nuestra compilación que apareció como una advertencia.
No obtuvimos los detalles hasta que aumentamos Visual Studio -> Herramientas -> Opciones -> Proyectos y soluciones -> Compilar y ejecutar -> Verbosidad de salida de compilación del proyecto MSBuild a Detallado.
Nuestro proyecto es una aplicación web .net v4 y hubo un conflicto entre System.Net.Http (v2.0.0.0) y System.Net.Http (v4.0.0.0). Nuestro proyecto hizo referencia a la versión v2 del archivo desde un paquete (incluido usando nuget). Cuando eliminamos la referencia y agregamos una referencia a la versión v4, la compilación funcionó (sin advertencias) y se solucionó el error.
fuente
Otra variación de este error es cuando usa resharper y usa algunas opciones de refactorización "automática" que incluyen el cambio de nombre del espacio de nombres. Esto es lo que me pasa. Para resolver un problema con este tipo de escenario, elimine la carpeta
bin
fuente
Haga clic derecho en el proyecto y seleccione limpiar el proyecto. O bien, vaciar completamente el directorio bin y luego volver a compilar. Esto debería eliminar cualquier ensamblaje sobrante de compilaciones anteriores
fuente
En algún momento en una sola aplicación, este problema también aparece. En ese caso, seleccione estas casillas de verificación cuando publique su aplicación
fuente
Si pudiera ayudar a otros, también me enfrento a este error. El problema fue causado por una referencia incorrecta en mi sitio web. Por razones desconocidas, mi sitio web se refería a otro sitio web, en la misma solución. Y una vez que elimino esa mala referencia, la cosa comenzó a funcionar correctamente.
fuente
Si está trabajando en Episerver u otro CMS basado en MVC, es posible que ese nombre de controlador en particular ya haya sido reclamado.
Esto me sucedió al intentar crear un controlador llamado
FileUpload
.fuente
Estaba enfrentando el problema similar. y la razón principal fue que tenía el mismo controlador en dos áreas diferentes. Una vez que elimine uno de ellos, está funcionando bien.
Lo tengo será útil para usted.
fuente
Tengo dos proyectos en una solución con el mismo nombre de controlador. Eliminé la segunda referencia de proyecto en el primer proyecto y el problema está resuelto
fuente
He encontrado que este error puede ocurrir con el sitio web tradicional de ASP.NET cuando crea el controlador en un directorio que no es App_Code (a veces Visual Studio lo impide).
Establece el tipo de archivo en "Compilar", mientras que cualquier código agregado a "App_Code" se establece en "Contenido". Si copia o mueve el archivo a App_Code, todavía está configurado como "Compilar".
Sospecho que tiene algo que ver con la operación del Proyecto del sitio web, ya que los proyectos del sitio web no tienen ninguna operación de compilación. Borrar la carpeta bin y cambiar a "Contenido" parece solucionarlo.
fuente