ASP.NET 在 class 库中找不到核心视图(Microsoft.Net.Sdk 没有 .Web)

ASP.NET Core View Not Found in a class library (Microsoft.Net.Sdk without .Web)

我想要一个 Microsoft.Net.Sdk 项目,它使用 asp.net 内核启动 Web 服务器。这是一个普通的 dll 项目,而不是 Web 项目。 csproj header 如下:

<Project Sdk="Microsoft.NET.Sdk">

为了让它发挥作用,我添加了(参见 docs):

<ItemGroup>
    <FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>

Web 服务器正确启动但是 视图不工作,我总是遇到View Not Found 异常。视图位于正确的位置并且是 Content 文件。

如果我从 <Project Sdk="Microsoft.NET.Sdk"> 更改为 <Project Sdk="Microsoft.NET.Sdk.Web"> 一切正常。

我想我必须添加一些包或 FrameworkReference 到我的 csproj,但我找不到任何东西。有什么想法吗?

我通过为 ASP.NET 核心项目切换到推荐的 SDK 标签解决了这个问题:

<Project Sdk="Microsoft.NET.Sdk.Web">

最初我认为在 class 库项目中使用该模式会带来其他问题,但我只是部分正确:切换到 Microsoft.NET.Sdk.Web SDK 会将项目输出类型更改为 Exe(不再是 class 库),因此它将开始抱怨缺少 Main() 方法。

但简单的部分是您可以通过设置 OutputType 属性:

来覆盖此行为
<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
    <!-- Explicitely override this setting because Microsoft.NET.Sdk.Web sets it to Exe -->
    <OutputType>Library</OutputType>
  </PropertyGroup>

此外,您不需要包含 Microsoft.AspNetCore.App 框架,因此 您应该删除此部分:

<ItemGroup>
    <FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>