まず第一に、モデルを別のプロジェクトに入れることは確かに良い考えです。あなたが発見したように、これは取るに足らないことです。
コントローラーとビューに関しては、特定のアプリケーションで特定の必要があるかもしれませんが、ほとんどの基本的なプロジェクトでそれらを分離する明らかな利点はありません。
これを行うことを選択した場合、コントローラを見つける方法をフレームワークに通知する必要があります。これを行う基本的な方法は、独自のControllerFactoryを提供することです。DefaultControllerFactoryのソースコードを見て、これがどのように行われるかを知ることができます。このクラスのサブタイプを作成し、GetControllerType(string controllerName)メソッドをオーバーライドするだけで、目的を達成できます。
独自のカスタムControllerFactoryを作成したら、global.asaxのApplication_Startに次の行を追加して、フレームワークに検索場所を指示します。
ControllerBuilder.Current.SetControllerFactory(new MyControllerFactory());
アップデート:読むこの記事 と、それはより多くの情報のためにリンクの記事を。以下についてのその投稿に関するPhil Haackのコメントも参照してください。
ControllerBuilder.Current.DefaultNamespaces.Add(
"ExternalAssembly.Controllers");
...これは完全な解決策ではありませんが、単純なケースでは十分な可能性があります。