web-dev-qa-db-ja.com

別のアセンブリのASP.NET Core MVCコントローラー

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ルーティングオーバーライド なしでこの種のシナリオをサポートすることになっています。

33
booler

RC2で次の既知の問題に直面していると思います。 https://github.com/aspnet/Mvc/issues/4674 (回避策はバグに記載されています)

これはその後修正されましたが、次のリリースでのみ利用可能になります(ナイトリービルドを使用しても問題ない場合を除く)

7
Kiran Challa

まだ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を使用することを忘れないでください!

66