首页 > 其他分享 >Install-Package 和 dotnet add package安装NuGet包对比

Install-Package 和 dotnet add package安装NuGet包对比

时间:2024-06-03 15:34:22浏览次数:22  
标签:Core Package package NuGet add dotnet NET

关于使用场景

Install-Package SSH.NETdotnet add package SSH.NET 这两个命令都用于安装NuGet包,但它们是用于不同命令行工具和环境的。这里是两者的主要区别:

  1. Install-Package SSH.NET

    • 这是一个用于NuGet包管理器控制台的命令,这个控制台是集成在Visual Studio中的。
    • 主要用于.NET Framework和早期版本的.NET项目。
    • 允许在Visual Studio的集成开发环境中执行包安装和管理操作。
    • 支持更复杂的包管理操作,如版本约束、目标框架选择等。
  2. dotnet add package SSH.NET

    • 这是一个用于.NET Core命令行接口(CLI)的命令。
    • 旨在与.NET Core和.NET 5/6/7等更现代的.NET版本一起使用,但也支持.NET Framework项目。
    • 可以在任何支持.NET Core CLI的平台上使用,不依赖于Visual Studio。
    • 更加适合自动化脚本和跨平台项目管理。

总结来说,选择哪个命令取决于你的开发环境和项目类型。如果你在使用Visual Studio开发.NET Framework项目,可能会更倾向于使用Install-Package。如果你在使用.NET Core或更高版本的.NET,并且希望有更好的跨平台支持和命令行工具,那么使用dotnet add package会更合适。

 

关于下载包位置

两种方法(Install-Packagedotnet add package)确实都用于安装NuGet包到你的项目中,但包的存放位置和管理方式可能有所不同:

  1. Install-Package

    • 在早期的.NET Framework项目中,使用Install-Package通常会将NuGet包下载到解决方案目录下的一个名为packages的文件夹中。这是早期NuGet版本的默认行为。
    • 随着NuGet的版本升级和PackageReference格式的引入,包的存放位置和管理方式发生了变化。在使用PackageReference的项目中,包不再存储在本地packages文件夹中,而是在全局NuGet缓存中管理。这可以减少项目间的重复下载,节省磁盘空间。
  2. dotnet add package

    • dotnet add package 命令遵循.NET Core及更高版本的NuGet包管理策略,通常使用PackageReference格式将包的引用添加到项目文件(如.csproj)中。
    • 实际的包文件被存储在用户的全局NuGet缓存中,而不是在项目目录或任何特定于解决方案的文件夹中。这同样是为了避免不同项目之间的重复下载,并统一管理依赖项。

总结

  • 如果你的项目仍然使用packages.config文件来管理NuGet依赖(这通常在较老的.NET Framework项目中见到),则使用Install-Package可能会导致包被下载到项目的packages文件夹。
  • 如果你的项目使用的是PackageReference(现在.NET Core和许多更新的.NET Framework项目中的标准),那么无论使用哪种命令,包都会被存储在全局NuGet缓存中,而不是在项目目录下。

对于新项目或正在维护的现有项目,使用PackageReference并通过全局缓存管理包是推荐的做法,因为它提供了更好的性能和更易于管理的依赖项结构。

 

关于dotnet add package

当你使用 dotnet add package 命令时,实际上是在使用.NET Core CLI(命令行接口)内嵌的NuGet功能来添加包到你的项目中。这个命令是.NET Core环境中处理NuGet包的标准方式,它简化了包的添加、更新和移除操作。

如何工作:

  • 添加包dotnet add package 命令会将指定的包添加到项目文件(如.csproj)中,同时自动更新项目的依赖项和(如有需要)更新项目文件中的其他相关设置。
  • 包解析和安装:当运行 dotnet restore(通常这个步骤会在dotnet add package后自动执行)或构建项目时,.NET Core CLI 会解析项目文件中的包依赖项,并从配置的NuGet源下载并安装这些包。
  • 包管理:下载的包不是放在项目目录或packages文件夹中,而是存储在全局NuGet缓存中。这样做可以避免同一包的多份拷贝,节省空间并提高解析和安装速度。

特点和好处:

  • 跨平台支持:.NET Core CLI 支持Windows、macOS和Linux,使得在各种操作系统上管理.NET项目的NuGet包变得容易。
  • 集成体验:与Visual Studio或其他IDE(如Visual Studio Code)结合使用时,.NET Core CLI 提供了无缝的开发体验,使得包管理和项目构建过程高度自动化和一致。
  • 命令行工具优势:命令行工具对于自动化脚本和持续集成/持续部署环境尤为有用,因为它们可以轻松地集成到各种自动化工作流中。

通过这种方式,.NET Core CLI 提供了一个强大且灵活的工具集,帮助开发者在.NET Core和.NET 5/6/7等更现代的.NET版本中高效管理NuGet包依赖。

 

dotnet add package在.NET Framework中的使用

dotnet add package 命令虽然是为 .NET Core CLI 设计的,但它也可以用于.NET Framework项目,只要这些项目使用的是 csproj 文件格式,并且采用了 PackageReference 方式来管理NuGet依赖。这种方式在新版本的 .NET Framework 项目中是支持的,特别是从 .NET Framework 4.7.2 开始,微软推荐使用 PackageReference 来代替传统的 packages.config 文件。

如何在 .NET Framework 项目中使用 dotnet add package

  1. 确认项目文件格式:确保你的 .NET Framework 项目使用的是 csproj 文件,并已经转换为使用 PackageReference。如果项目仍然使用 packages.config 管理NuGet包,你需要先将其迁移到 PackageReference。
  2. 执行命令:在项目目录下,打开命令行工具,执行 dotnet add package 包名称 来添加需要的包。

转换 packages.configPackageReference

如果你的项目还在使用 packages.config,你可以在 Visual Studio 中轻松迁移到 PackageReference:

  • 打开项目的 packages.config 文件右键菜单,选择 "迁移到 PackageReference"。
  • Visual Studio 会自动处理迁移过程,并更新项目文件。

注意事项:

  • 虽然 .NET Core CLI 提供跨平台支持和现代化的包管理功能,但在一些老版本的 .NET Framework 项目中可能会遇到兼容性问题。
  • 使用 dotnet add package 之前,确保你的开发环境(如 Visual Studio)和项目配置适合这种方式。

总之,dotnet add package 在符合条件的 .NET Framework 项目中是可以使用的,它为项目提供了更现代化和高效的包管理方式。

 

笔者遇到的问题
我是用了.NET framework 4.6.1 理论上是没有使用 PackageReference 来代替传统的 packages.config 文件,检查项目里的.csproj文件,没有包含<PackageReference>标签的条目。

同时我的项目里存在packages.config文件,这说明我的项目是使用packages.config方式而非PackageReference来管理NuGet依赖的。

这时我使用了dotnet add package SSH.NET
就会有报错

PM> dotnet add package SSH.NET

欢迎使用 .NET Core!
---------------------
详细了解 .NET Core: https://aka.ms/dotnet-docs
使用 "dotnet --help" 查看可用的命令,或者访问 https://aka.ms/dotnet-cli-docs

遥测
---------
.NET Core 工具会收集使用数据来帮助我们改进体验。数据由 Microsoft 进行收集并共享给社区。可使用你喜欢的 shell 将 DOTNET_CLI_TELEMETRY_OPTOUT 环境变量设置为 "1" 或 "true" 来选择退出遥测。

若要详细了解 .NET Core CLI 工具遥测,请访问: https://aka.ms/dotnet-cli-telemetry

ASP.NET Core
------------
已成功安装 ASP.NET Core HTTPS 开发证书。
要信任证书,请运行 "dotnet dev-certs https --trust"(仅限 Windows 和 macOS)。要在其他平台上建立信任,请参阅特定于平台的文档。
有关配置 HTTPS 的详细信息,请参阅 https://go.microsoft.com/fwlink/?linkid=848054。
dotnet : “D:\Desktop\TSN\AutoTSN_V1.0(试用版)\”中找不到任何项目。
所在位置 行:1 字符: 1
+ dotnet add package SSH.NET
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (“D:\Desktop\TSN...试用版)\”中找不到任何项目。:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError
 
用法: dotnet add <PROJECT> package [选项] <PACKAGE_NAME>

参数:
  <PROJECT>        要操作的项目文件。如果未指定文件,则命令会在当前目录下搜索一个文件。
  <PACKAGE_NAME>   要添加的包引用。

选项:
  -h, --help                          显示命令行帮助。
  -v, --version <VERSION>             要添加的包版本。
  -f, --framework <FRAMEWORK>         仅针对特定框架添加引用。
  -n, --no-restore                    在没有执行还原预览和兼容性检查的情况下添加引用。
  -s, --source <SOURCE>               要在还原期间使用的 NuGet 包源。
  --package-directory <PACKAGE_DIR>   要将包还原到其中的目录。
  --interactive                       允许命令停止和等待用户输入或操作(例如,用以完成身份验证)。

 使用Install-Package SSH.NET就OK了

标签:Core,Package,package,NuGet,add,dotnet,NET
From: https://www.cnblogs.com/ban-boi-making-dinner/p/18228935

相关文章

  • python画图报错:OSError: 'seaborn-whitegrid' is not a valid package style
    解决方法:https://stackoverflow.com/questions/78019854/matplotlib-seaborn-whitegrid-is-not-a-valid-package-style?newreg=7ee17d6cd10c4182b08284391596644b代码:importmatplotlib.pyplotaspltplt.style.available效果:这个问题说明对应的样式package不存在,查......
  • centos7安装jq报错No package jq available
    安装EPEL仓库sudoyuminstallepel-release清理软件仓缓存sudoyumcleanall重建软件仓缓存sudoyummakecache重新安装jqyuminstalljq......
  • nuget添加readme
    提问nuget如何添加readme回答目录csproj其他nuget最佳实践https://learn.microsoft.com/en-us/nuget/create-packages/package-authoring-best-practices......
  • nuget search v3 linq
    https://github.com/yanckst/search-nuget-v3/blob/master/search.linq<QueryKind="Program"><NuGetReference>NuGet.PackageManagement</NuGetReference><NuGetReference>NuGet.Packaging</NuGetReference><Namespac......
  • Unity 2022无法安装Entities 1.2.0 Package的解决方法
    会出现如下的错误提示:本质原因是国内版的Unity2022使用了自己的Package加速CDN:packages.unity.cn,而不是官方的packages.unity.com。而这个CDN更新了Entities的几个包到1.2.0,却没有将依赖的com.unity.collections更新到2.4.0。诡异的是CDN里却有2.4.1。所以解决方法就来了:直......
  • 运维系列&go系列:cannot find package “xxx“ in any of的通用解决方案
    cannotfindpackage“xxx“inanyof的通用解决方案目录问题背景解决通用解决方案这个问题遇到频率还是比较高,这次总结出来,希望能让更多的人脱离苦海!如有帮助,欢迎留下足迹哦!问题背景作者的问题:提示找不到的是工程内部自定义的包名今天出了个奇怪的事情,编译......
  • jmeter警告:WARN StatusConsoleListener The use of package scanning to locate plugi
    运行jmeter,出现警告信息 警告信息:WARNStatusConsoleListenerTheuseofpackagescanningtolocatepluginsisdeprecatedandwillberemovedinafuturerelease意思是,JMeter在将来的版本中将移除使用包扫描来定位插件的功能 如果想不显示警告信息,可以修改JMeter......
  • NuGet微软官方中国国内镜像
    NuGet镜像上线试运行为解决国内访问NuGet服务器速度不稳定的问题 ,这里推荐使用NuGet微软官方中国国内镜像地址:https://nuget.cdn.azure.cn/v3/index.json添加NuGet源的方式菜单:工具-> NuGet包管理器-> 程序包管理器设置 安装包:菜单:工具-> NuGet包管理器-......
  • VS2022 修改nuget包位置
    文章目录前言NuGet配置文件位置NuGet环境变量其他问题前言由于C盘的空间有限,NuGet的包位置默认又在C盘,这就很烦,只能去自己手动修改NuGet配置文件位置配置文件共有三处,添加下面的内容即可(高版本可以设置环境变量解决)<--添加下面的键值即可-->1234C:\Users......
  • (报错)ROS2:WARNING:colcon.colcon_core.package_selection:ignoring unknown package
    在使用colcon编译时,如果直接对所有包编译colconbuild则不会有问题,但是针对单独某个包编译colconbuild--packages-select<pkg>则报错WARNING:colcon.colcon_core.package_selection:ignoringunknownpackagegg了一下找到了问题参考:https://unix.stackexchange.co......