关于使用场景
Install-Package SSH.NET
和 dotnet add package SSH.NET
这两个命令都用于安装NuGet包,但它们是用于不同命令行工具和环境的。这里是两者的主要区别:
-
Install-Package SSH.NET:
- 这是一个用于NuGet包管理器控制台的命令,这个控制台是集成在Visual Studio中的。
- 主要用于.NET Framework和早期版本的.NET项目。
- 允许在Visual Studio的集成开发环境中执行包安装和管理操作。
- 支持更复杂的包管理操作,如版本约束、目标框架选择等。
-
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-Package
和 dotnet add package
)确实都用于安装NuGet包到你的项目中,但包的存放位置和管理方式可能有所不同:
-
Install-Package:
- 在早期的.NET Framework项目中,使用
Install-Package
通常会将NuGet包下载到解决方案目录下的一个名为packages
的文件夹中。这是早期NuGet版本的默认行为。 - 随着NuGet的版本升级和PackageReference格式的引入,包的存放位置和管理方式发生了变化。在使用PackageReference的项目中,包不再存储在本地
packages
文件夹中,而是在全局NuGet缓存中管理。这可以减少项目间的重复下载,节省磁盘空间。
- 在早期的.NET Framework项目中,使用
-
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
:
- 确认项目文件格式:确保你的 .NET Framework 项目使用的是
csproj
文件,并已经转换为使用 PackageReference。如果项目仍然使用packages.config
管理NuGet包,你需要先将其迁移到 PackageReference。 - 执行命令:在项目目录下,打开命令行工具,执行
dotnet add package 包名称
来添加需要的包。
转换 packages.config
到 PackageReference
:
如果你的项目还在使用 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