亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

.NET Core 2.2 中的 Metapackage 和 SDK 有什么區別?

.NET Core 2.2 中的 Metapackage 和 SDK 有什么區別?

C#
牛魔王的故事 2022-10-23 13:54:51
我試圖在 .NET Core 術語中區分這兩個概念。我將嘗試用一個例子來說明我的困惑。當我創建一個新的類庫項目(例如:)dotnet new classlib -o myclasslib時,生成的.csproj文件如下所示:<Project Sdk="Microsoft.NET.Sdk">  <PropertyGroup>    <TargetFramework>netstandard2.0</TargetFramework>  </PropertyGroup></Project>到目前為止,一切都很好?,F在,如果我嘗試在這個項目中添加 WebApi 控制器類(例如,為了在創建為: 的主 WebApi 應用程序中動態加載插件dotnet new webapi -o mywebapi),我將需要使用ControllerBase類[ApiController]和[HttpGet]屬性之類的東西。為了簡單起見,我只是從 ControllerBase 派生 MyController ,如下所示:using System;namespace myclasslib{    public class MyController : Microsoft.AspNetCore.Mvc.ControllerBase    {    }}試圖用dotnet build我來構建這個錯誤:錯誤 CS0234:命名空間“Microsoft”中不存在類型或命名空間名稱“AspNetCore”(您是否缺少程序集引用?)這是意料之中的,因為我創建了 classlib 項目,但是如果將 .csproj 中的 SDK 更改為Sdk="Microsoft.NET.Sdk.Web"并更改TargetFramework為netcoreapp2.2(希望解決對ControllerBase類的引用),如下所示:<Project Sdk="Microsoft.NET.Sdk.Web">  <PropertyGroup>    <TargetFramework>netcoreapp2.2</TargetFramework>  </PropertyGroup></Project>構建項目時出現同樣的錯誤。SDK不應該包含我構建項目所需的一切嗎?如果我創建通常的 webapi 項目(例如dotnet new webapi -o mywebapi),生成的.csproj看起來像這樣:<Project Sdk="Microsoft.NET.Sdk.Web">  <PropertyGroup>    <TargetFramework>netcoreapp2.2</TargetFramework>    <AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>  </PropertyGroup>  <ItemGroup>    <PackageReference Include="Microsoft.AspNetCore.App" />    <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />  </ItemGroup></Project>我注意到 SDK 與我設置的 SDK 相同,但還添加了一個元包:<PackageReference Include="Microsoft.AspNetCore.App" />那么,如果我們已經指定要使用 Microsoft.NET.Sdk,為什么還需要顯式添加元包。網絡?另一個問題:如果我們沒有在 PackageReference 中指定一個元包版本(比如在這個生成的 webapi .csproj 中),那么使用什么版本的元包?
查看完整描述

1 回答

?
莫回無

TA貢獻1865條經驗 獲得超7個贊

SDK 只是構建工具和 .NET Core 框架本身。ASP.NET Core 是一組 NuGet 包。本質上是 .NET Core 框架!= ASP.NET Core 代碼。元包的概念只是切線相關的。所謂的“ASP.NET Core”實際上是幾十個單獨的 NuGet 包。您可以單獨引用每個,但正如您可以想象的那樣,這既煩人又容易出錯。元包本質上是一個依賴于多個其他 NuGet 包的 NuGet 包。

因此,通過僅拉入元包,基本上所有元包的依賴項都被拉入。因此,您可以簡單地添加一個包引用,Microsoft.AspNetCore.App然后您就可以參加比賽了。但是,這樣做的缺點是您可能會獲得實際上不需要的依賴項。對于像 Web 應用程序這樣的東西來說,這并不是什么大問題,因為可以修剪依賴關系,但類庫不應該有過多的依賴關系。因此,您應該只從Microsoft.AspNetCore命名空間中引用您實際需要的單個 NuGet 包。


查看完整回答
反對 回復 2022-10-23
  • 1 回答
  • 0 關注
  • 108 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號