ASP.NET MVC Core RC-2を使用しています。完全な.NETフレームワークをターゲットとするWebプロジェクトがあります。また、ソリューションには別のクラスライブラリがあり、フレームワーク全体を対象としています。
クラスライブラリには、ルート属性でマークされたコントローラーがあります。 Webプロジェクトからクラスライブラリを参照しました。このアセンブリは、nugetパッケージMicrosoft.AspNetCore.Mvc v. 1.0.0-rc2-final
。
この外部コントローラーが自動的に検出されることは私の理解でした。 http://www.strathweb.com/2015/04/asp-net-mvc-6-discovers-controllers/
ただし、これは機能しません。ルートのURLを参照すると、空白のページが表示され、コントローラーブレークポイントにヒットしません。
これを機能させる方法はありますか?
興味深いことに、.NET CoreフレームワークをターゲットとするWebプロジェクトで機能し、.NET Coreもターゲットとするクラスライブラリを参照しているようです。ただし、完全なフレームワークを対象とするWebプロジェクトではなく、標準の.NETクラスライブラリを参照します。
注:これはMVCコアであり、 MVC <= 4ルーティングオーバーライド なしでこの種のシナリオをサポートすることになっています。
RC2で次の既知の問題に直面していると思います。 https://github.com/aspnet/Mvc/issues/4674 (回避策はバグに記載されています)
これはその後修正されましたが、次のリリースでのみ利用可能になります(ナイトリービルドを使用しても問題ない場合を除く)
まだASP.Net Core 1.0の問題ですが、現在設計上の問題かどうかはわかりません。最も簡単な解決策は、Startup.cs/ConfigureServicesでこれを行うことです。
services.AddMvc()
.AddApplicationPart(typeof(<class in external Assembly>).Assembly)
.AddControllersAsServices();
AddApplicationPartは、コントローラの検索にアセンブリを明示的に含めます。 AddControllersAsServices()を呼び出すと、検出されたすべてのコントローラーがサービスコレクションに追加され、この行の後にブレークポイントを置いて「サービス」を調べると、見つかったすべてのコントローラータイプがコレクションに表示されます。
こちらも確認してください: https://docs.asp.net/en/latest/migration/rc1-to-rtm.html#asp-net-5-mvc-compile-views RC1からコントローラーの検出ルールが変更されたためです。
また、ActionResultの代わりにIActionResultを使用することを忘れないでください!