我試圖在 .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 包。
- 1 回答
- 0 關注
- 108 瀏覽
添加回答
舉報
0/150
提交
取消