对dotnet.exe与nuget.exe的误解



我对NuGet关于dotnet.exenuget.exe之间差异的文档感到非常困惑。让我表达一下我对整个.NET生态系统的理解,并介绍一下我感到困惑的地方:

好的,我们有了.NET,它是一个用于构建各种应用程序的框架。NET有几个实现,即.NET Framework版本1-4.8,然后是.NET Core 1.0-3.1,然后是.NET5+。

除此之外,我们还有所谓的";。NET标准"-这是实现所遵循的API的规范,以便为特定标准编写的应用程序可以肯定地在符合此版本.NET标准的任何实现上运行。

用.NET编写的每个应用程序或库都指定了它要针对的TargetFramework。这意味着该应用程序只能在.NET.的这些实现上运行

到目前为止还不错吗?

现在,我们有了NuGet,它是.NET项目的包管理器。NuGet有2个CLI工具,在介绍它们时,文档告诉我们dotnet.exe如下:

CLI工具,适用于.NET Core和.NET Standard库,以及任何SDK风格的项目,例如以.NET Framework为目标的项目。包含在.NET Core SDK中,并在所有平台上提供核心NuGet功能。。。

好的-这是什么意思;用于.NET核心和.NET标准库";?这是否意味着以.NET Core和.NET Standard为目标的库应该使用dotnet.exe进行打包?

此外,";任何SDK风格的项目,例如以.NET Framework为目标的项目";?也许我没有正确地掌握英语——这是不是意味着";任何SDK风格的项目";,而一个以.NET Framework为目标的项目总是这样的项目?或者它的意思是";任何以.NET Framework为目标的SDK风格的项目";?我真的不明白。一个项目是SDK项目还是非SDK项目与它所针对的.NET实现之间有关系吗?

dotnet(Windows上的dotnet.exe(CLI工具提供nuget功能。它适用于所有.NET Core、.NET Standard和.NET>=5个项目。您应该能够使用dotnet工具打包任何以.NET Core、.NET 5或更新版本以及.NET Standard为目标的项目。nuget仍然可以工作,但dotnet更容易;普通的";并且在这方面有更好的文档。


.NET已经使用项目文件很长时间了"SDK风格的项目文件";是传统项目文件的新变体,与.NET Core一起使用,.NET>=5.

您可以通过在Projectxml元素中将项目文件标记为SDK样式的项目,或者通过添加单独的SDK元素,甚至通过Import作为Sdk.props文件来指示项目文件。

.NET核心,以及.NET>=默认情况下,5个是SDK风格的项目。NET Framework项目不是,您已经明确地将它们迁移到SDK样式。

换句话说,如果您想使用dotnet将东西打包为nuget,并且您正在使用.NET Framework应用程序,那么在使用dotnet创建nuget包之前,您需要迁移到新的SDK风格的项目。

更多信息:https://learn.microsoft.com/en-us/dotnet/core/project-sdk/overview

最新更新