.NET 7依赖项和NuGet包管理

3

我在Visual Studio 2022中开始了一个新的.NET 7项目。我使用的模板是"ASP.NET Core WebAPI"。在解决方案浏览器中,该项目呈现如下:

WebAPI dependencies

我可以看到,在文件夹“C:\Program Files\dotnet\packs\Microsoft.AspNetCore.App.Ref\7.0.2\ref\net7.0”中有一系列DLL的依赖关系。当我浏览到这个文件夹并获取例如“Microsoft.AspNetCore.Http.Abstractions.dll”程序集时,我看到它的版本为7.0.22.....这是有道理的。

奇怪的是,当我在此项目上单击“管理NuGet包”时,我发现没有已安装的NuGet包。看起来这种依赖机制与NuGet无关。

现在我想创建一个类库,将封装一些常见功能,我想在项目之间共享,但它需要从“Microsoft.AspNetCore.Http.Abstractions.dll”文件中定义的HttpContext类读取数据。那么我应该如何添加此依赖项?

通过在类库项目上使用“dotnet add package Microsoft.AspNetCore.App”命令添加它似乎是一种资源浪费,因为它会添加整个dll包,而我只关心.Http.Abstractons.dll及其直接依赖项。 此外,当我运行该命令时,Visual Studio会出现警告:

NETSDK1080 当目标为.NET Core 3.0或更高版本时,不需要将PackageReference添加到Microsoft.AspNetCore.App。如果使用Microsoft.NET.Sdk.Web,则共享框架将自动引用。否则,应该用FrameworkReference替换PackageReference。
通过NuGet添加dll可以解决Visual Studio的问题,但是添加的程序集版本是2.2.0而不是dotnet包中的7.0.2。因此,在一个项目中引用的HttpContext与在另一个项目中引用的HttpContext是不同的。
请帮助我理解这个机制,以及如何将感兴趣的dll添加到我的项目中,以便能够在我的库中访问HttpContext。什么时候应该使用dotnet add package,什么时候应该使用NuGet包管理?有没有关于从.NET Framework 4.+到.NET 7在这个领域提升的好文章?
作为.NET用户已经有10年左右的时间了,我感到在最近的发展中迷失了方向,并且发现我在网上找到的官方文档几乎没有用处。
  1. 我尝试通过 "dotnet add package" 命令添加 Microsoft.AspNetCore.App 包 - Visual Studio 抱怨了,而且它拉取了整个程序集包,但我只关心 "Microsoft.AspNetCore.Http.Abstractions.dll"。

  2. 我尝试添加 "Microsoft.AspNetCore.Http.Abstractions" NuGet 包,但所添加的程序集版本与 WebAPI 项目中引用的完全不同。


“我应该在什么情况下使用dotnet add package,什么情况下使用NuGet包管理?” 第一个是当你想通过命令行来操作时使用的,第二个是当你想使用图形界面时使用的。它们实际上做的事情是一样的。“Framework”不是“Package”。不要尝试搞乱你的框架。它是由项目SDK选择的。 - JHBonarius
1个回答

4
“奇怪的是,当我在这个项目上单击“管理NuGet程序包”时,我发现没有任何已安装的NuGet程序包。”
“这些依赖关系是由项目SDK确定的,可以在.csproj的根元素中找到:”
<Project Sdk="Microsoft.NET.Sdk.Web">
   ...
</Project>

那么我应该如何添加这个依赖项呢?
对于最新版本的.NET,您应该通过FrameworkReference引用相应的SDK。例如,要引用ASP.NET Core组件,您应该将<FrameworkReference Include="Microsoft.AspNetCore.App"/>添加到库项目的.csproj文件中,如docs(以及警告中)所述。
<Project Sdk="Microsoft.NET.Sdk">
  <!--... rest of file-->

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

  <!--... rest of file-->
</Project>

使用全功能集成开发环境手动操纵项目文件是违反直觉的,但这显然是正确的方法。作为对您回复的补充,我想补充一下这篇文章 https://learn.microsoft.com/en-us/aspnet/core/fundamentals/target-aspnetcore?view=aspnetcore-7.0&tabs=visual-studio ,其中指出:“随着.NET Core 3.0的发布,许多ASP.NET Core程序集不再作为包发布到NuGet上。相反,这些程序集将包含在Microsoft.AspNetCore.App共享框架中,该框架与.NET Core SDK和运行时安装程序一起安装。” - mkarczewski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接