web-dev-qa-db-ja.com

「ホーム」という名前のコントローラーに一致する複数のタイプが見つかりました-2つの異なるエリアで

私のプロジェクトには2つの分野があります。プログラムを実行すると、次のエラーが発生します。

Multiple types were found that match the controller named 'Home'. This can happen if the route that services this request ('{controller}/{action}/{id}') does not specify namespaces to search for a controller that matches the request. If this is the case, register this route by calling an overload of the 'MapRoute' method that takes a 'namespaces' parameter.

The request for 'Home' has found the following matching controllers:
BaseAdminMVC.Areas.BaseAdmin.Controllers.HomeController
BaseAdminMVC.Areas.TitomsAdmin.Controllers.HomeController  

ここでいくつかのソースを見つけました: 複数のコントローラー名
しかし、それは1つの領域でしか機能しないと思います。
私の場合、異なる分野で2つのプロジェクトがあります。誰かが問題を解決するために私が何をすべきかを教えてくれることを願っています。
これがGlobal.asaxファイル:

public static void RegisterRoutes(RouteCollection routes)
        {
            string[] namespaces = new string[] { "BaseAdminMVC.Areas.BaseAdmin.Controllers", "BaseAdminMVC.Areas.TitomsAdmin.Controllers"};

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                namespaces
            );
        }  

ちなみに、HomeControllerフォルダーの外にもコントローラー( "Area")があります。これは、2つのプロジェクトBaseAdminTitomsAdminへのリンクを提供するだけです。

私はこの解決策を試しましたが、それでもは機能しません

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

            routes.MapRoute(
                "BaseAdmin",
                "BaseAdmin/{controller}/{action}",
                new { controller = "Account", action = "Index" },
                new string[] { "BaseAdminMVC.Areas.BaseAdmin.Controllers" }
            );

            routes.MapRoute(
                "TitomsAdmin",
                "TitomsAdmin/{controller}/{action}",
                new { controller = "Home", action = "Index" },
                new string[] { "BaseAdminMVC.Areas.TitomsAdmin.Controllers" }
            );

前もって感謝します!!

14
fiberOptics

何が起こるかわかりませんが、このコードは正常に機能します。

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional },
        new string[] { "BaseAdminMVC.Areas.TitomsAdmin.Controllers" }
    );
}
18
fiberOptics

プロジェクトの名前空間/アセンブリの名前を変更した後、このエラーが発生しました。

Namespace/Assemblyの名前を変更した場合、binフォルダーに以前の名前のAssembly/dllが残っている可能性があります。そこから削除するだけで動作するはずです。

7
Justin Ipson

プロジェクトを右クリックし、[プロジェクトのクリーンアップ]を選択します。または、binディレクトリを完全に空にしてから、再ビルドします。これにより、残っているアセンブリがすべて削除されます。

2
VivekDev