ASP.NET 核心 6 应用程序部分项目必须引用哪些 Nuget 包

What Nuget packages must be referenced by an ASP.NET Core 6 application parts project

我正在创建一个 ASP.NET Core 6 应用程序,我想在其中集成由单独程序集提供的其他区域。我遵循 https://docs.microsoft.com/en-us/aspnet/core/mvc/advanced/app-parts?view=aspnetcore-6.0 上的文档。在一个提供app parts的项目中,我添加了一个IMvcBuilder的扩展方法,方便我注册parts组件,例如:

services.AddMvc().AddFeatureXyzParts();

该扩展只做这样的事情:

public static IMvcBuilder AddFeatureXyzParts(this IMvcBuilder builder)
{
    if (builder == null) throw new ArgumentNullException(nameof(builder));
    builder.AddApplicationPart(typeof(MvcBuilderExtensions).Assembly);
    return builder;
}

在项目文件中,我将 Sdk 属性从 Microsoft.NET.Sdk 更改为 Microsoft.NET.Sdk.Web 以隐式引用 ASP.NET Core 6 SDK(因为它是为主应用程序项目),但这会破坏构建并出现错误,指出程序集缺少 Main 方法的定义。

因为它不是一个独立的网络应用程序集,而是一个运送额外控制器类型和服务的零件库,我想将 Sdk 属性 设置回 Microsoft.NET.Sdk .然后我必须手动添加缺少的包引用。为此,Microsoft.AspNetCore.App 包似乎是ASP.NET Core 6 的错误选择,并且一定不能使用Microsoft.AspNetCore.App.Refs

我需要哪些参考资料?

更新 - 定义所需的入口点以满足构建

作为一种允许我引用所需的 ASP.NET Core 6 SDK 的解决方法,如果我添加一个内部 Program class,我可以使用 Microsoft.NET.Sdk.Web SDK定义了一个 Main 方法。有了这个,我可以根据需要注册我的零件装配,控制器(即使是一个区域的一部分)也能很好地集成。

internal static class Program
{
    public static void Main() => throw new NotImplementedException();
}

您可以将 <FrameworkReference Include="Microsoft.AspNetCore.App"/> 添加到库项目 .csproj 文件中,如 docs 中所述:

<Project Sdk="Microsoft.NET.Sdk">
  <!--... rest of file-->

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

  <!--... rest of file-->
</Project>