“核心”SDK 和 Web SDK 之间有什么区别,这些对通用主机应用程序有何影响?

最重要的区别是:

  1. 默认项目

    Web SDK 具有不同的定义和 globbing 模式,用于将哪些文件包含在已发布的应用程序中。

    例如,当你有一个appsettings.json文件时,使用 web sdk 的项目将自动包含它,因为有适当的模式确保.config.json文件和文件wwwroot夹中的所有文件都是发布输出的一部分。有关这些模式,请参阅GitHub 上的 MSBuild 源代码

    如果您有通用主机并且不使用 Web SDK,则可能需要将代码添加到 csproj 文件以指定要将哪些文件复制到发布目录(或使用 IDE 更改“复制到输出目录”设置它还包括发布输出中的文件,但也会将它们复制到构建输出中):

    <ItemGroup>
      <None Update="*.json" CopyToPublishDirectory="PreserveNewest" />
    </ItemGroup>
  2. 网络发布逻辑

    Web SDK 的另一个重要部分是它包含 Web 应用程序的部署逻辑。

    如果您计划使用发布配置文件(.pubxml文件)或使用 MSBuild / MSDeploy 部署到 Azure 或文件系统,您将需要此发布逻辑。

类库使用哪个 SDK?

为了在发布公共库(例如通过 NuGet)时获得最大兼容性,请使用核心 SDK 并引用尽可能低版本的单个包 - 例如 2.1.0 / 2.1.1。

如果您开发包含 razor 视图的类库,您将需要使用Microsoft.NET.Sdk.RazorSDK 来获取 razor 工具(例如,当您使用dotnet new razorclasslib模板时)。

对于您想使用与应用程序相同的元包引用的库和测试项目,目前情况有点复杂,但它会变得更好:

对于 ASP.NET Core 2.1 工具 (!) (CLI 2.1.*),我建议对类库使用非 Web SDK,并使用该包的版本 2.1.1。永远不要升级它,即使 NuGet 为您提供升级。

对于 2.1 工具 (!) (CLI 2.1.*) 中的测试项目,它有点不同且棘手,请参阅集成和单元测试不再适用于 ASP.NET Core 2.1 无法在运行时找到程序集

从 2.2 工具 (CLI 2.2.100+) 开始,对 ASP.NET Core 元包的无版本包引用被移动到核心 SDK,因此您可以使用“ "core"" SDK(前提是您使用工具 2.2.100+)使用无版本包引用:

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

在 .NET Core / ASP.NET Core 3.0 中,您将能够通过一种全新的机制来引用框架(不需要 web-SDK):

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

来自:https://stackoverflow.com/questions/52434690/what-are-the-differences-between-microsoft-net-sdk-and-microsoft-net-sdk-web

看杨中科老师的最后大项目里使用了

<FrameworkReference Include="Microsoft.AspNetCore.App" />
但是在.Net7中老是有个黄三角标识,.Net6中去掉这个引用也不报错,可能我使用到的(WebApplicationBuilder)已经包含在Microsoft.NET.Sdk 基础包里了吧。