2012-01-09 38 views
14

私のプロジェクトには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 

::私は、プログラムを実行すると、私はこのエラーを取得Multiple Controller name
をしかし、私はそれだけで一つの領域のために働くと思います。
私の場合、私は異なる分野に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 
      ); 
     } 

ところで、私はまた、Areaフォルダの外( "HomeController")をコントローラいます。これは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" } 
      ); 

感謝を!

+1

編集の再実行:デフォルトルートを下に(最後の場所に)移動する必要があります。ここでは順序が重要です。 –

+0

@HenkHoltermanまだ動作しませんでした。 – fiberOptics

+0

そして、 "うまくいかない"という意味はまだ分かりません。 –

答えて

18

私が起こるかわかりませんが、このコードは正常に動作します:私は私のプロジェクトの名前空間/アセンブリの名前変更を行った後、このエラーを得た

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" } 
    ); 
} 
+28

私は出力アセンブリの名前とデフォルトの名前空間を変更したので、このエラーが発生しました。私は古いコンパイルされたアセンブリ(MVC3サイトから)を実現せずにプロジェクトのdebug/binフォルダに残しました。サイトがロードされると、古いアセンブリと新しく名前が変更されたアセンブリの両方からホームコントローラが取得され、同じエラーが発生しました。長い話を簡単に言えば、私はビンに入って古いアセンブリを取り除き、すべてが完全に動作するようになった。 – OFConsulting

+0

ありがとう!私は現在4.0から.Net 4.5に移行しています。あなたのヒントは、同じエラーが再度表示された場合に役立つ可能性があります。 – fiberOptics

+1

@OFConsulting私はコメントで「ありがとう」と言ってはいけないが、FU - * - THANKS! – Ydhem

6

名前空間/アセンブリの名前を変更した場合は、binフォルダ内の以前の名前から残りのアセンブリ/ dllがある可能性があります。そこから削除すればうまくいくはずです。

2

プロジェクトを右クリックし、プロジェクトのクリーニングを選択します。あるいは、binディレクトリを完全に空にして、再度ビルドし直してください。これにより、左上のアセンブリがクリアされます。

関連する問題