2016-06-09 32 views
16

我正在使用ASP.NET MVC Core RC-2。我有一个针对完整.NET框架的Web项目。我在解决方案中也有一个单独的类库,也是针对整个框架的。独立程序集中的ASP.NET Core MVC控制器

在类库中,我有一个控制器,标有路由属性。我从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核心,应该支持这种情况没有任何MVC<=4 routing overrides

+0

可能的重复[如何注册一个控制器到ASP.NET MVC控制器类在不同的程序集?](http://stackoverflow.com/questions/7560005/how-to-register-a-controller -into-asp-net-mvc-when-the-controller-class-in-a) – Oscar

+0

这是MVC核心 - 全新的ASP.NET堆栈 – booler

回答

4

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

这已从那时起固定的,但只会在下一版本可用的(除非你确定使用每晚构建)

36

仍然在ASP.Net核心问题1.0,不知道现在是否设计。最简单的解决方案是在Startup.cs/ConfigureServices中执行此操作。

services.AddMvc() 
    .AddApplicationPart(typeof(<class in external assembly>).GetTypeInfo().Assembly) 
    .AddControllersAsServices(); 

AddApplicationPart明确包含搜索控制器的程序集。 对AddControllersAsServices()的调用会将所有发现的控制器添加到服务集合中,如果您在此行后面放置断点并检查'services',您将在集合中看到找到的所有控制器类型。

您可能还想在这里查看:https://docs.asp.net/en/latest/migration/rc1-to-rtm.html#asp-net-5-mvc-compile-views,因为发现规则现在从RC1更改为控制器。

还记得使用IActionResult而不是ActionResult!

+6

对于我来说,只使用'.AddApplicationPart(typeof()。Assembly)'就够了。您也可以使用另一行代替:'.AddApplicationPart(Assembly.Load(“ExternalAssemblyName”));' – Learner

+1

现在必须进行设计,事后再打开它会是可怕的。 – Ciantic

+0

做了同样的事情,但没有成功 – DanilGholtsman