NuGet 常见问题

有关 NuGet.org 相关常见问题(如 NuGet.org 帐户问题),请参阅NuGet.org 常见问题解答

常规

运行 NuGet 有哪些要求?

安装指南中提供了有关 UI 和命令行工具的所有信息。

NuGet 是否支持 Mono?

命令行工具、 nuget.exe生成和运行通常在 Windows 下运行。 NuGet 可以在 Unix 操作系统上运行mono,但它不受 NuGet 的支持策略正式支持

Mono 已将所有权转让给 Wine,不再由Microsoft维护。

如何确定包的内容及其是否适用于应用程序?

了解包的主要来源为 nuget.org(或其他私有源)上的包清单页。 nuget.org 上的每个包页面都包含包的说明、其版本历史记录和使用情况统计信息。 包页面中的“信息”部分还包含项目网站的链接,此网站通常提供大量实例和其他文档,帮助你了解包的使用方法

有关详细信息,请参阅查找和选择包

Visual Studio 中的 NuGet

NuGet 在不同 Visual Studio 产品中的受支持情况

如何查看安装的 NuGet 工具的确切版本?

在 Visual Studio 中,请使用帮助 > 关于 Microsoft Visual Studio 命令,然后查看NuGet 包管理器旁显示的版本。

或者,启动“包管理器控制台”(工具 > NuGet 包管理器 > 包管理器控制台),输入 $host,然后查看包括版本信息在内的 NuGet 的相关信息。

NuGet 支持哪些编程语言?

NuGet 旨在将 .NET 库引入项目,通常适用于 .NET 语言。 由于 NuGet 还在某些项目类型中支持 MSBuild 和 Visual Studio 自动化,因此它也在不同程度上支持其他项目和语言。

最新版 NuGet 支持 C#、Visual Basic、F#、WiX、C++ 和 Q#。

NuGet 支持哪些项目模板?

NuGet 对多种项目模板提供完整支持,如 Windows、Web、Cloud、SharePoint 和 Wix 等。

如何更新 Visual Studio 模板中的包?

在包管理器 UI,转到更新选项卡,选择全部更新;或者使用包管理控制台中的 Update-Package 命令

若要更新模板本身,则需要手动更新模板存储库。 请参阅与该主题相关的 Xavier Decoster 博客。 请注意,此操作的风险由自己承担,因为如果所有依赖项的最新版本不相互兼容,手动更新可能会损坏该模板。

是否可以在 Visual Studio 之外使用 NuGet?

可以,NuGet 可直接在命令行中使用。 请参阅安装指南CLI 参考

NuGet 命令行

如何获取最新版本的 NuGet 命令行工具?

请参阅安装指南。 若要检查当前安装的工具版本,请使用 nuget help

nuget.exe 的许可证是什么?

可以根据 MIT 许可条款重新分发 nuget.exe。 你有责任更新和维护你选择重新分发的所有 nuget.exe 副本。

是否可以扩展 NuGet 命令行工具?

是的,可以向 nuget.exe 添加自定义命令,如 Archive.org 上的 Rob Reynold 帖子所述。

NuGet 包管理器控制台(Windows 版 Visual Studio)

如何在包管理器控制台中访问 DTE 对象?

Visual Studio 自动化对象模型中的顶层对象称为 DTE (开发工具环境)对象。 控制台通过名为 $DTE 的变量提供此对象。 有关详细信息,请参阅 Visual Studio 扩展性文档中的自动化模型概述

我尝试将 $DTE 变量强制转换为类型 DTE2,但出现错误:无法将类型“EnvDTE.DTEClass”的“EnvDTE.DTEClass”值转换为类型“EnvDTE80.DTE2”。 为什么会这样?

这是 PowerShell 与 COM 对象交互的已知问题。 请尝试以下做法:

`$dte2 = Get-Interface $dte ([EnvDTE80.DTE2])`

Get-Interface 是 NuGet PowerShell 主机添加的帮助程序函数。

创建和发布包

如何在源中列出我的包?

请参阅创建和发布包

我有面向不同版本的 .NET Framework 的多个版本的库。 如何才能生成一个支持此方案的包?

如何设置自己的存储库或源?

请参阅托管包概述

如何将包批量上传到我的 NuGet 源?

请参阅批量发布 NuGet 包 (jeffhandly.com)。

使用包

是否可以在没有 Internet 连接时安装 NuGet 包?

可以,请参阅 Scott Hanselman 的博客文章 How to access NuGet when nuget.org is down (or you're on a plane)(如何在 nuget.org 不可用(或用户在飞机上)时访问 NuGet)(hanselman.com)。

如何在默认包文件夹以外的其他位置安装包?

请使用 nuget config -set repositoryPath=<path> 设置 Nuget.Config 中的 repositoryPath 设置。

如何避免将 NuGet 包文件夹中添加到源代码管理中?

请将 Nuget.Config 中的 disableSourceControlIntegration 设为 true。 此密钥适用于解决方案级别,因此需要添加到 $(Solutiondir)\.nuget\Nuget.Config 文件中。 从 Visual Studio 中启用包还原将自动创建此文件。

如何关闭包还原?

安装具有远程依赖项的本地包时,为何会出现“无法解析依赖项”错误?

将本地包安装到项目中时,需要选择“所有”源。 这样可以聚合所有源,而不只是一个源。 本地存储库用户通常不希望因为公司政策而意外安装远程包,因此才会出现此错误。

如果同一文件夹中有多个项目,如何使用每个项目单独的 packages.config 文件?

对于各个项目位于单独文件夹中的大多数项目,用户不必考虑此问题,因为 NuGet 会识别每个项目中的 packages.config 文件。 如果使用 NuGet 3.3+ 并且同一文件夹中有多个项目,可将项目名称插入 packages.config 文件名(使用 packages.{project-name}.config 模式),然后 NuGet 将使用该文件。

使用 PackageReference 时不必考虑此问题,因为每个项目文件仅包含自己的依赖项列表。

存储库列表中未显示 nuget.org,应如何让其重新显示?

  • https://api.nuget.org/v3/index.json 添加到源列表;或
  • 删除 %appdata%\.nuget\NuGet.Config (Windows) 或 ~/.nuget/NuGet/NuGet.Config (Mac/Linux) 并指示 NuGet 重新创建它。

我已迁移到 PackageReference,但为什么我的生成失败并显示“此项目引用了该计算机上缺少的 NuGet 包。”?

在 package. .config 项目中,如果安装了带 build 属性或目标的包,NuGet 将添加一个 EnsureNuGetPackageBuildImports 目标,以验证在生成之前是否已导入包 msbuild 内容。 如果已手动修改 target,NuGet 可能无法检测到它需要在迁移时删除。

如果项目是 PackageReference,并且在项目文件中仍有此目标,则可以放心删除。