2017-09-19 20 views
1

私はちょうど/管理者コンパイラは2つのホームコントローラと競合しますが、異なるWebプロジェクトで競合していますか?

複数のタイプがいた次のエラーを与えているが

に行くことができるように顧客を必要とする管理サイトに自宅使用分でMVCプロジェクトに持っています'Home'という名前のコントローラーと一致するものが見つかりました。この は、この要求に対応するルート ( '{controller}/{action}/{id}')が要求に一致するコントローラの を検索するための名前空間を指定していない場合に発生します。この場合、 は 'namespaces'パラメータを取る 'MapRoute'メソッド のオーバーロードを呼び出してこのルートを登録します。

「ホーム」の要求は、次の一致するコントローラーを発見した: solitude.admin.Controllers.HomeController solitudeWebMvc.Controllers.HomeControllerは

だから私は、管理者の私RoutesConfig.csに次を試してみましたプロジェクト

public static void RegisterRoutes(RouteCollection routes) 
{ 
routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

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

しかし、私はまだ誰もが任意のアイデアを持っている上記と同じエラーで表示されます。私はadminとフロントエンドのために1つの複数のMVC Webプロジェクトを使用しています。配備されると、これらは別々のポートに配置されます。あなたは素晴らしいことだ2つのプロジェクトのための構成、の両方を投稿することができれば

enter image description here

+0

別々のアプリケーションとして配備された別々のプロジェクトには、この問題はないはずです。プロジェクトはどのような方法でも相互に参照していますか? (彼らはすべきではありませんが、クラスライブラリの共通コードを参照することができるはずです。) – David

+0

こんにちは@David私は孤独への参照があります。孤独webmvcの管理者はそれが正しくありません。しかし、それは視覚スタジオでこの問題を抱えていますあなたはそれが違うポートでもこの問題を抱えていないと言っているのですか?私は自分自身と話していません。 – david

+0

アプリケーションプロジェクトはお互いを参照してはいけません。共通のコードを共有する必要がある場合は、そのコードを2つのプロジェクトが参照する共通のクラスライブラリに移動する必要があります。いずれかのアプリケーションプロジェクトが他のアプリケーションプロジェクトを参照するとすぐに、*両方の*プロジェクトのコードをその1つのアプリケーションにロードしようとします。だから両方のコントローラを見つけて、それらを区別することができません。 – David

答えて

0

、しかし、あなたが投稿したとして、設定を見てから、それは直接関係ない名前空間を指定していますプロジェクトに

"AppName.Areas.Admin.Controllers"名前空間の指定が正しくない(と単純なコピー&ペースト・エラー)になりそうだとして、二つのプロジェクトのためのあなたの名前空間がさらに"solitude.admin.Controllers""solutideWebMvc.Controllers"

する必要がありますので、あなたも持っていることのように、それが見えますIISの構成が間違っているため、/ adminに展開すると、子アプリケーションはルートフォルダのバイナリと/ adminフォルダのバイナリを使用しようとしています。

私はこれが完璧な答えではないことを認識していますが、さらに手助けするためにいくつかの追加情報を提供する必要があります。

1

質問にコメントによると:

私は孤独への参照を持っています。孤独の管理者webmvc

あなたのアプリケーションプロジェクトはお互いを参照すべきではありません。彼らが行うときの構造を考えてみましょう:あなたはこれらをコンパイルして実行すると

Application1 
    -> Reference to Application2 
Application2 

は、Application2は罰金になります。しかし、Application1には、のコードのすべてが現在のアプリケーションにあります。したがって、フレームワークがそのコードを調べると、衝突するコントローラーを見つけてそれらを区別することができなくなります。 コードのすべてからApplication2まではApplication1のようにする必要はありません。

代わりに、このような構造を考える:

Application1 
    -> Reference to ClassLibrary1 
Application2 
    -> Reference to ClassLibrary1 
ClassLibrary1 

任意の共有コード、理想的には、アプリケーションレベルのフレームワークリソースへの無依存性を持つオブジェクトとして、ClassLibrary1であろう。どちらのアプリケーションも、その共有コードを使用するためにそのクラスライブラリプロジェクトを参照できます。しかし、アプリケーションインスタンス自体は互いに独立している必要があります。

関連する問題