ASP.NET Core MVC控制器在单独的程序集中

时间:2016-06-09 12:23:52

标签: asp.net-core-mvc asp.net-core-1.0

我正在使用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 Framework的Web项目,引用了一个同样面向.NET Core的类库。但不是针对完整框架的Web项目,而是引用标准的.NET类库。

注意:这是MVC Core,应该支持这种情况而不需要任何MVC<=4 routing overrides

2 个答案:

答案 0 :(得分:62)

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中的控制器现在更改了发现规则。

还记得使用IActionResult而不是ActionResult!

答案 1 :(得分:6)

我相信你在RC2中遇到了以下已知问题。 https://github.com/aspnet/Mvc/issues/4674(错误中提到了解决方法)

此后已经修复,但只能在下一个版本中使用(除非你可以使用每晚版本)