本文适用于: ✔️ .NET Core 3.1 SDK 及更高版本
名字
              dotnet package add - 在项目文件中添加或更新包引用。
注释
如果使用的是 .NET 9 SDK 或更早版本,请改用“谓词优先”窗体(dotnet add package)。 .NET 10 中引入了“名词第一”形式。 有关详细信息,请参阅 更一致的命令顺序。
概要
dotnet package add <PACKAGE_NAME>
    [-f|--framework <FRAMEWORK>] [--interactive] [--project <PROJECT>]
    [-n|--no-restore] [--package-directory <PACKAGE_DIRECTORY>]
    [--prerelease] [-s|--source <SOURCE>] [-v|--version <VERSION>]
dotnet package add -h|--help
说明
该 dotnet package add 命令提供了在项目文件中添加或更新包引用的便捷选项。 运行命令时,会进行兼容性检查,以确保包与项目中的框架兼容。 如果检查通过并且未在项目文件中引用包,则会 <PackageReference> 将元素添加到项目文件中。 如果检查通过并且已在项目文件中引用包,则 <PackageReference> 元素将更新为最新版本。 更新项目文件后,将运行 dotnet 还原 。
例如, Microsoft.EntityFrameworkCore 添加到 ToDo.csproj 会生成类似于以下示例的输出:
  Determining projects to restore...
  Writing C:\Users\username\AppData\Local\Temp\tmp24A8.tmp
info : Adding PackageReference for package 'Microsoft.EntityFrameworkCore' into project 'C:\ToDo\ToDo.csproj'.
info :   CACHE https://api.nuget.org/v3/registration5-gz-semver2/microsoft.entityframeworkcore/index.json
info :   GET https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/516521bf-6417-457e-9a9c-0a4bdfde03e7/nuget/v3/registrations2-semver2/microsoft.entityframeworkcore/index.json
info :   CACHE https://api.nuget.org/v3/registration5-gz-semver2/microsoft.entityframeworkcore/page/0.0.1-alpha/3.1.3.json
info :   CACHE https://api.nuget.org/v3/registration5-gz-semver2/microsoft.entityframeworkcore/page/3.1.4/7.0.0-preview.2.22153.1.json
info :   CACHE https://api.nuget.org/v3/registration5-gz-semver2/microsoft.entityframeworkcore/page/7.0.0-preview.3.22175.1/7.0.0-preview.3.22175.1.json
info :   NotFound https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/516521bf-6417-457e-9a9c-0a4bdfde03e7/nuget/v3/registrations2-semver2/microsoft.entityframeworkcore/index.json 257ms
info : Restoring packages for C:\ToDo\ToDo.csproj...
info : Package 'Microsoft.EntityFrameworkCore' is compatible with all the specified frameworks in project 'C:\ToDo\ToDo.csproj'.
info : PackageReference for package 'Microsoft.EntityFrameworkCore' version '6.0.4' added to file 'C:\ToDo\ToDo.csproj'.
info : Writing assets file to disk. Path: C:\ToDo\obj\project.assets.json
log  : Restored C:\ToDo\ToDo.csproj (in 171 ms).
              ToDo.csproj 文件现在包含<PackageReference>所引用包的元素。
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.4" />
如果项目已载入 中央包管理(CPM), 则会 <PackageVersion> 添加/更新该 Directory.Packages.props file 元素,并将 <PackageReference> 该元素添加到项目文件中。
目前支持以下方案。 这些示例假定最新版本 Microsoft.EntityFrameworkCore 为 6.0.4。 
              此设计规范中记录了与 CPM 相关的其他方案。
方案 1: <PackageReference> 项目文件中不存在, <PackageVersion> 元素不存在, Directory.Packages.props file并且版本参数不是从命令行传递的。
执行的 CLI 命令: dotnet package add Microsoft.EntityFrameworkCore --project ToDo.csproj
元素<PackageVersion>将添加到 .Directory.Packages.props file
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="6.0.4" />
该 <PackageReference> 元素将添加到项目文件。
<PackageReference Include="Microsoft.EntityFrameworkCore" />
方案 2: <PackageReference> 项目文件中不存在, <PackageVersion> 元素不存在, Directory.Packages.props file版本参数从命令行传递。
执行的 CLI 命令: dotnet package add Microsoft.EntityFrameworkCore --version 5.0.4 --project ToDo.csproj
元素<PackageVersion>将添加到 .Directory.Packages.props file
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="5.0.4" />
该 <PackageReference> 元素将添加到项目文件。
<PackageReference Include="Microsoft.EntityFrameworkCore" />
方案 3: <PackageReference> 项目文件中不存在, <PackageVersion> 元素存在于项目 Directory.Packages.props file文件中,并且版本参数不是从命令行传递的。
执行的 CLI 命令: dotnet package add Microsoft.EntityFrameworkCore --project ToDo.csproj
元素<PackageVersion>将添加到 .Directory.Packages.props file
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="6.0.4" />
该 <PackageReference> 元素将添加到项目文件。
<PackageReference Include="Microsoft.EntityFrameworkCore" />
方案 4: <PackageReference> 项目文件中不存在, <PackageVersion> 元素存在于项目 Directory.Packages.props file文件中,并且版本参数是从命令行传递的。
执行的 CLI 命令: dotnet package add Microsoft.EntityFrameworkCore --version 5.0.4 --project ToDo.csproj
元素<PackageVersion>将添加到 .Directory.Packages.props file
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="5.0.4" />
该 <PackageReference> 元素将添加到项目文件。
<PackageReference Include="Microsoft.EntityFrameworkCore" />
隐式还原
无需运行 dotnet restore,因为它由所有需要还原的命令隐式运行,如 dotnet new、dotnet build、dotnet run、dotnet test、dotnet publish 和 dotnet pack。 若要禁用隐式还原,请使用 --no-restore 选项。
在某些显式还原有意义的场景中,dotnet restore 命令仍然有用,比如在 Azure DevOps Services 中进行持续集成构建时,或在需要显式控制还原发生时间的生成系统中。
有关如何管理 NuGet 源的信息,请参阅 dotnet restore 文档。
论据
- PROJECT- 指定项目文件。 如果未指定,该命令将在当前目录中搜索一个目录。 
- PACKAGE_NAME- 要添加的包引用。 
选项
- -f|--framework <FRAMEWORK>- 仅在面向特定 框架时添加包引用。 
- -?|-h|--help- 打印出有关如何使用命令的说明。 
- --interactive- 允许命令停止并等待用户输入或操作。 例如,完成身份验证。 
- -n|--no-restore- 添加包引用,而无需执行还原预览和兼容性检查。 
- --package-directory <PACKAGE_DIRECTORY>- 用于还原包的目录。 默认包还原位置位于 - %userprofile%\.nuget\packagesWindows 和- ~/.nuget/packagesmacOS 和 Linux 上。 有关详细信息,请参阅 在 NuGet 中管理全局包、缓存和临时文件夹。
- --prerelease- 允许安装预发行版包。 自 .NET Core 5 SDK 起可用 
- -s|--source <SOURCE>- 还原操作期间要使用的 NuGet 包源的 URI。 
- -v|--version <VERSION>- 包的版本。 请参阅 NuGet 包版本控制。 
例子
- 将 - Microsoft.EntityFrameworkCoreNuGet 包添加到项目:- dotnet package add Microsoft.EntityFrameworkCore
- 将包的特定版本添加到项目: - dotnet package add Microsoft.Azure.DocumentDB.Core -v 1.0.0 --project ToDo.csproj
- 使用特定的 NuGet 源添加包: - dotnet package add Microsoft.AspNetCore.StaticFiles -s https://dotnet.myget.org/F/dotnet-core/api/v3/index.json