首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Microsoft.NET.Sdk和Microsoft.NET.Sdk.Web有什么区别?

Microsoft.NET.Sdk和Microsoft.NET.Sdk.Web有什么区别?
EN

Stack Overflow用户
提问于 2018-09-20 23:40:10
回答 1查看 13.7K关注 0票数 40

我有一个包含两个主机项目(一个是Web主机,另一个是通用主机)的解决方案,以及这两个主机项目引用的类库项目。

Sdk文件的根标记<Project><Project>属性中,主机项目(web主机和通用主机)都使用Microsoft.NET.Sdk.Web,但是类库项目使用Microsoft.NET.Sdk

两个主机项目引用Microsoft.AspNetCore.App元打包。

类库项目使用Microsoft.NETCore.App,但它单独引用了一些ASP.NET核心包(不是Microsoft.NETCore.App中的Microsoft.AspNetCore.App包)。

关于正确的SDK和metapackage:

( 1)在一般的主机项目中,是否应该使用纯.NET Core (Microsoft.NET.SdkMicrosoft.NETCore.App)而不是ASP.NET Core (Microsoft.NET.Sdk.WebMicrosoft.AspNetCore.App),因为它不是一个web项目?

2)在类库项目中,使用Microsoft.NET.SdkMicrosoft.AspNetCore.App可以避免引用属于Microsoft.AspNetCore.App的不同版本的包(例如,宿主项目中的Microsoft.AspNetCore.App@2.1.0和类库项目中的Microsoft.Extensions.Configuration@2.0.0 )?或者我只能在Microsoft.AspNetCore.App SDK中使用Microsoft.NET.Sdk.Web元打包?

( 3)使用Microsoft.NET.SdkMicrosoft.NET.Sdk.Web有什么区别?文档说,“SDK,正如分层文档所描述的,是一组可以构建.NET核心代码的MSBuild任务和目标。”,但为什么我们需要两者兼而有之?在实践中,Microsoft.NET.Sdk.Web做什么Microsoft.NET.Sdk不做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-22 11:37:02

广告(1)和(3):“核心”和“网络SDK”之间有什么区别,它们是如何影响普通主机应用的?

最重要的区别是:

  1. 默认项 web有不同的定义和全局模式,其中包含在发布的应用程序中的文件。 例如,当您有一个appsettings.json文件时,使用web的项目将自动包含它,因为有一些模式可以确保.config.json文件和wwwroot文件夹中的所有文件都是发布输出的一部分。见这些模式的MSBuild源代码在GitHub上。 如果您有一个通用主机,并且不使用Web,则可能需要向csproj文件添加代码以指定要复制到发布目录的文件(或使用IDE更改“复制到输出目录”设置,该设置还包括发布输出中的文件,但也将它们复制到生成输出中):
  2. 网络发布逻辑 Web的另一个重要部分是它包含web应用程序的部署逻辑。 如果您计划使用发布概要文件(.pubxml文件)或使用MSBuild / MSDeploy部署到azure或文件系统,您将需要这个发布逻辑。

Ad (2):类库使用哪个SDK?

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

如果您开发了一个包含剃刀视图的类库,您将需要使用Microsoft.NET.Sdk.Razor SDK来获得剃须刀工具(例如,当您使用dotnet new razorclasslib模板时)。

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

对于ASP.NET Core2.1工具(!)(CLI2.1.*)我建议对类库使用非web,并使用该包的2.1.1版本。永远不要升级它,即使NuGet提供了升级。

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

从2.2工具(CLI 2.2.100+)开始,对ASP.NET核心元包的少版本包引用被移动到核心SDK中,这样您就可以使用“ASP.NET”2.2.100+使用版本少的包引用为ASP.NET Core2.1和2.2开发库和测试项目:

代码语言:javascript
复制
<ItemGroup>
  <PackageReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>

在.NET Core / ASP.NET Core3.0中,您可以完全通过一种新机制(不需要web)引用框架:

代码语言:javascript
复制
<ItemGroup>
  <FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
票数 41
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52434690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档