“核心”SDK 和 Web SDK 之间有什么区别,这些对通用主机应用程序有何影响?
最重要的区别是:
-
默认项目
Web SDK 具有不同的定义和 globbing 模式,用于将哪些文件包含在已发布的应用程序中。
例如,当你有一个
appsettings.json
文件时,使用 web sdk 的项目将自动包含它,因为有适当的模式确保.config
、.json
文件和文件wwwroot
夹中的所有文件都是发布输出的一部分。有关这些模式,请参阅GitHub 上的 MSBuild 源代码。如果您有通用主机并且不使用 Web SDK,则可能需要将代码添加到 csproj 文件以指定要将哪些文件复制到发布目录(或使用 IDE 更改“复制到输出目录”设置它还包括发布输出中的文件,但也会将它们复制到构建输出中):
<ItemGroup> <None Update="*.json" CopyToPublishDirectory="PreserveNewest" /> </ItemGroup>
-
网络发布逻辑
Web SDK 的另一个重要部分是它包含 Web 应用程序的部署逻辑。
如果您计划使用发布配置文件(
.pubxml
文件)或使用 MSBuild / MSDeploy 部署到 Azure 或文件系统,您将需要此发布逻辑。
类库使用哪个 SDK?
为了在发布公共库(例如通过 NuGet)时获得最大兼容性,请使用核心 SDK 并引用尽可能低版本的单个包 - 例如 2.1.0 / 2.1.1。
如果您开发包含 razor 视图的类库,您将需要使用Microsoft.NET.Sdk.Razor
SDK 来获取 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" />标签:Web,2.1,使用,NET,Sdk,Microsoft,SDK From: https://www.cnblogs.com/djd66/p/16924590.html
但是在.Net7中老是有个黄三角标识,.Net6中去掉这个引用也不报错,可能我使用到的(WebApplicationBuilder)已经包含在Microsoft.NET.Sdk 基础包里了吧。