将视图和控制器放在与 ASP.NET 核心 Web 应用程序不同的项目中

Putting Views and Controllers in a different project than the ASP.NET Core Web app

我正在尝试将我的 ASP.NET Core 3.0 pre-release 9 MVC 应用拆分成不同的项目。例如,我希望将与一个子域相关的所有内容都放入一个名为 Website.SubdomainA 的项目中,将另一个子域放入 Website.SubdomainB.

我试图用 Razor Class 库来完成这个。根据MSDN,这些应该可以包含以下内容:

Razor views, pages, controllers, page models, Razor components, View components, and data models can be built into a Razor class library (RCL).

所以我继续创建了一个 'RCL',它看起来像下面这样:

<Project Sdk="Microsoft.NET.Sdk.Razor">
  <PropertyGroup>
    <TargetFramework>netstandard2.1</TargetFramework>
    <RazorLangVersion>3.0</RazorLangVersion>
  </PropertyGroup>
</Project>

然后我复制了我的控制器和视图——但是,出于某种原因,它找不到任何包含基础 类 的程序集,例如 ControllerRouteAttribute以及 Microsoft.AspNetCore.Mvc 命名空间中包含的所有其他内容。

此外,我的视图无法编译,因为它们找不到所需的程序集,Layout = "Test" 之类的东西被标记为红色。

我是不是遗漏了什么明显的东西?

尝试使用 <TargetFramework>netcoreapp3.0</TargetFramework>。请参阅上面链接的问题中的 this comment

We are removing the netstandard2.0 from most Microsoft.AspNetCore.* assemblies.

要创建 Razor Class 库,您需要在 *.csproj 中附加 AddRazorSupportForMvc,如下所示:

<Project Sdk="Microsoft.NET.Sdk.Razor">
<PropertyGroup>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <AddRazorSupportForMvc>true</AddRazorSupportForMvc>
</PropertyGroup>
<ItemGroup>
    <FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
</Project>