update tools route packs net mvc microsoft language instalar asp c# asp.net-mvc-3 controller

c# - tools - Se encontraron varios tipos que coinciden con el controlador llamado ''Inicio''



mvc c# (24)

Acabo de eliminar la carpeta ''Bin'' del servidor y copio mi bin al servidor, y mi problema se resolvió.

Actualmente tengo dos proyectos MVC3 no relacionados alojados en línea.

Uno funciona bien, el otro no funciona, y me da el error:

Se encontraron múltiples 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 hoster es que me da acceso a 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 FTP los contenidos 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 los controladores EN CUALQUIER LUGAR dentro de ftpFolderA2 y es por eso que está encontrando otro HomeController ? ¿Cómo puedo decir que solo se vea en la carpeta Controlador como debería?

Hechos:

  1. No utilizar áreas. Estos son dos proyectos COMPLETAMENTE no relacionados. Coloco cada proyecto publicado en cada carpeta respectiva. Nada sofisticado.
  2. Cada proyecto solo tiene 1 HomeController.

¿Alguien puede confirmar que este es el problema?


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 servidor web y entrar en mi directorio de publicación y eliminar los archivos en la carpeta BIN, eliminándolos localmente no hacía nada cuando publiqué.


Aquí hay otro escenario en el que podría enfrentar este error. Si cambia el nombre de su proyecto para que el nombre del archivo del ensamblaje cambie, es posible que tenga dos versiones de su ensamblaje ASP.NET, que reproducirán este error.

La solución es ir a su carpeta bin y eliminar las dlls antiguas. (Intenté "Reconstruir proyecto", pero eso no los eliminó, así que asegúrate de revisar la bin para asegurarse de que se hayan ido)


Aunque no esté usando áreas, aún puede especificar en su RouteMap qué espacio de nombres usar

routes.MapRoute( "Default", "{controller}/{action}", new { controller = "Home", action = "Index" }, new[] { "NameSpace.OfYour.Controllers" } );

Pero parece que el problema real es la forma en que se configuran sus dos aplicaciones en IIS


Descubrimos que obtuvimos 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 -> Generar y Ejecutar -> Proyecto de MSBuild.

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 de un paquete (incluido con 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.


En MVC4 y MVC5 es un poco diferente, use lo siguiente

/App_Start/RouteConfig.cs

namespace MyNamespace { public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, namespaces: new[] {"MyNamespace.Controllers"} ); } } }

y en Areas

context.MapRoute( "Admin_default", "Admin/{controller}/{action}/{id}", new { action = "Index", id = UrlParameter.Optional }, new[] { "MyNamespace.Areas.Admin.Controllers" } );


En Route.config

espacios de nombres: nuevo [] {"Appname.Controllers"}


Este mensaje de error suele ocurrir cuando utiliza á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. Así que en la definición de la ruta principal en Global.asax :

routes.MapRoute( "Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional }, new[] { "AppName.Controllers" } );

y en su ~/Areas/Admin/AdminAreaRegistration.cs :

context.MapRoute( "Admin_default", "Admin/{controller}/{action}/{id}", new { action = "Index", id = UrlParameter.Optional }, new[] { "AppName.Areas.Admin.Controllers" } );

Si no está utilizando áreas, parece que sus dos 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. Deberá configurar IIS para alojar esas dos aplicaciones de ASP.NET separadas si desea evitar este tipo de conflictos. Pídale esto a su proveedor de alojamiento si no tiene acceso al servidor.


Haga clic derecho en el proyecto y seleccione limpiar el proyecto. O bien, vacíe completamente el directorio bin y luego vuelva a compilarlo. Esto debería estar libre de cualquier ensamblaje sobrante de compilaciones anteriores


Lo que otros dicen es correcto, pero para aquellos que todavía enfrentan el mismo problema:
En mi caso, sucedió porque copié otro proyecto y le cambié el nombre a otra cosa, PERO los archivos de salida anteriores en la carpeta bin todavía estaban allí ... Y, desafortunadamente, al pulsar Build -> Clean Solution después de cambiar el nombre del proyecto y sus Namespaces no los eliminó ... así que borrándolos manualmente solucioné mi problema!


Me enfrentaba al problema similar. y la razón principal fue que tenía el mismo controlador en dos áreas diferentes. Una vez que elimine el de ellos esta funcionando bien.

Lo tengo útil para ti.



Otra solución es registrar un espacio de nombres predeterminado con ControllerBuilder. Como teníamos muchas rutas en nuestra aplicación principal y solo una única 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:

ControllerBuilder.Current .DefaultNamespaces.Add("YourApp.Controllers");


Otra variación de este error es cuando usa resharper y usa algunas opciones de refactor "automático" que incluyen cambio de nombre de espacio de nombres. Esto es lo que me pasa. Para resolver un problema con este tipo de escenario, elimine la carpeta bin


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:

Es posible que no haya envuelto su (s) controlador (es) global (es) en el "espacio de nombres" que proporcionó en el enrutamiento.

P.ej:

Hecho esto:

public class HomeController : Controller {

En lugar de:

namespace GivenNamespace.Controllers { public class HomeController : Controller {


Si desea resolverlo automáticamente ... puede usar la aplicación de manera sencilla, solo agregue el siguiente código:

routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, namespaces: new[] { string.Format("{0}.Controllers", BuildManager.GetGlobalAsaxType().BaseType.Assembly.GetName().Name) } );


Si está trabajando en Episerver, u otro CMS basado en MVC, puede encontrar que ya se ha reclamado ese nombre de controlador en particular.

Esto me sucedió al intentar crear un controlador llamado FileUpload .


Si pudiera ayudar a otros, también me he enfrentado a este error. El problema se debió a una referencia incorrecta en mi sitio web. Por una razón desconocida mi sitio web estaba refiriendo a otro sitio web, en la misma solución. Y una vez que elimine esa mala referencia, la cosa comenzó a funcionar correctamente.


También puede obtener el error 500 si agrega su propio ensamblaje que contiene el ApiController anulando GetAssemblies de DefaultAssembliesResolver y ya está en la matriz de base.GetAssemblies ()

Caso en punto:

public class MyAssembliesResolver : DefaultAssembliesResolver { public override ICollection<Assembly> GetAssemblies() { var baseAssemblies = base.GetAssemblies(); var assemblies = new List<Assembly>(baseAssemblies); assemblies.Add(Assembly.GetAssembly(typeof(MyAssembliesResolver))); return new List<Assembly>(assemblies); } }

Si el código anterior está en el mismo ensamblaje que su controlador, ese ensamblaje estará dos veces en la lista y generará un error 500 ya que la API web no sabe cuál usar.


Tengo dos proyectos en una solución con el mismo nombre de controlador. Quité la segunda referencia de proyecto en el primer proyecto y el problema se resolvió


Tengo los mismos problemas y nada ayudó. El problema es que en realidad no tengo duplicados, este error aparece después de cambiar el espacio de nombres del proyecto de MyCuteProject a MyCuteProject.Web .

Al final, me di cuenta de que la fuente de error es un archivo global.asax : marcado XML, no .cs -codebehind. Comprueba el espacio de nombres en él, eso me ha ayudado.


Verifique la carpeta bin si hay otro archivo dll que pueda tener conflictos con la clase homeController.


en su proyecto bin/ carpeta

asegúrese de tener solo su PROJECT_PACKAGENAME.DLL

y elimine ANOTHER_PROJECT_PACKAGENAME.DLL

Eso podría aparecer aquí por error o simplemente cambia el nombre de su proyecto


Algún tiempo en una sola aplicación, este problema también se presenta. En ese caso, seleccione estas casillas cuando publique su aplicación.