NuGet 2.7 发行说明

NuGet 2.6.1 for WebMatrix 发行说明 | NuGet 2.7.1 发行说明

NuGet 2.7 于 2013 年 8 月 22 日发布。

致谢

我们希望感谢以下外部参与者对 NuGet 2.7 的重大贡献:

  1. 迈克·罗斯· (@mxrss)
    • 详细列出包和详细情况时显示许可证 URL。
  2. 亚当·拉尔夫 (@adamralph)
    • #1956 - 在 pack 命令中添加 packages.config developmentDependency 属性并将其用于仅包含运行时包
  3. 拉斐尔·尼科莱蒂 (@tkrafael)
    • 避免在 nuget.exe pack 命令中重复属性键。
  4. 本·菲根 (@BenPhegan)
    • #2610 - 将计算机缓存大小增加到 200。
  5. Slava Trenogin (@derigel)
    • #3217 - 修复NuGet对话框,显示错误选项卡中的更新
    • 修复Project。TargetFramework 在 ProjectManager 中可以为 null
    • #3248 - 修复 SharedPackageRepository FindPackage/FindPackagesById 在不存在的 packageId 上失败
  6. 凯文·博伊尔 (@kevfromireland)
    • #3234 - 启用对 Nomad 项目的支持
  7. 科林·布莱基 (@corinblaikie)
    • #3252 - 修复了不存在文件时退出代码 0 的推送命令失败。
  8. 马丁·韦塞利
    • #3226 - 修复了项目引用数据库项目时Add-BindingRedirect命令的 bug。
  9. 米罗斯拉夫·巴吉托斯 (@bajtos)
    • #2891 - 修复了“exclude”属性中 nuget.pack 分析通配符的错误。
  10. 贾斯汀·亲爱的 (@zippy1981)
    • #3307 - 修复 bug NuGet.targets 不会在还原包时将 $ (Platform) 传递给nuget.exe。
  11. 布赖恩·费德里奇
    • #3294 - 修复了 nuget.exe 包命令中的 bug,该命令允许添加具有相同名称但不同大小写的文件,最终导致“项已存在”异常。
  12. 丹尼尔·卡祖利诺 (@kzu)
    • #2990 - 将 Version 属性添加到 NetPortableProfile 类。
  13. 大卫·辛纳
    • #3460 - 如果 requireApiKey = true,修复 bug NullReferenceException,但标头 X-NUGET-APIKEY 不存在
  14. 迈克尔·弗里斯 (@friism)
    • #3278 - 修复NuGet。生成目标文件,使其在 MonoDevelop 上正常工作
  15. 普拉纳夫·克里什纳莫西· (@pranav_km)
    • 通过增加并行化来提高还原命令性能

版本中的显著功能

NuGet 2.7 引入了包还原的新方法,还克服了一个主要障碍:包还原同意现已默认启用! 新方法和隐式同意的组合将大大简化包还原方案。

使用 NuGet版本 2.0、2.1、2.2、2.5 和 2.6,用户需要在生成期间显式允许NuGet下载缺少的包。 如果未显式授予此同意,则启用包还原的解决方案在用户授予同意之前将无法生成。

从 NuGet 2.7 开始,包还原同意默认为 ON,同时允许用户根据需要显式选择退出包还原,使用Visual Studio中NuGet设置中的复选框。 隐式许可的此更改会影响以下环境中的NuGet:

  • Visual Studio 2013 预览版
  • Visual Studio 2012
  • Visual Studio 2010
  • nuget.exe Command-Line实用工具

Visual Studio 中的自动包还原

从 NuGet 2.7 开始,即使尚未为解决方案显式启用包还原,NuGet也会在生成Visual Studio期间自动下载缺少的包。 生成项目或解决方案时,会在Visual Studio中执行此自动包还原,但在调用MSBuild之前。 这会产生一些显著的好处:

  1. 无需进一步在解决方案上使用“启用NuGet包还原”手势
  2. 无需修改项目,NuGet不会对项目进行更改,以确保启用包还原
  3. 所有NuGet包(包括MSBuild属性/目标文件的导入)将在调用MSBuild之前还原,确保生成期间正确识别这些属性/目标

若要在Visual Studio中使用自动包还原,只需在) 操作中执行一个 (:

  1. 不要签入文件夹packages

可通过多种方式从源代码管理中省略 packages 文件夹。 有关详细信息,请参阅 包和源代码管理 主题。

虽然所有用户都隐式选择“自动包还原”同意,但你可以通过Visual Studio中的程序包管理器设置轻松退出。

Package Manager Settings

从Command-Line简化的包还原

NuGet 2.7 引入了nuget.exe的新功能:nuget.exe restore

通过此新的 Restore 命令,可以通过接受解决方案文件或文件夹作为参数轻松还原解决方案的所有包。 此外,当当前文件夹中只有一个解决方案时,隐含该参数。 这意味着以下所有工作都来自包含单个解决方案文件的文件夹 (MySolution.sln) :

  1. nuget.exe还原 MySolution.sln
  2. nuget.exe还原。
  3. nuget.exe还原

Restore 命令将打开解决方案文件并查找解决方案中的所有项目。 在此处,它将找到 packages.config 每个项目的文件,并还原找到的所有包。 它还还原文件中找到 .nuget\packages.config 的解决方案级包。 有关新还原命令的详细信息,请参阅 命令行参考

新的包还原工作流

我们对包还原的这些更改感到兴奋,因为它引入了新的工作流。 如果要从源代码管理中省略包,只需不提交 packages 文件夹。 Visual Studio打开和生成解决方案的用户会看到自动还原的包。 对于命令行生成,只需在调用msbuild之前调用nuget.exe restore。 你不再需要记住在解决方案上使用“启用NuGet包还原”手势,我们不再需要修改项目以更改生成。 此外,对于包含MSBuild导入的包,这也会产生很大的改进体验,尤其是对于通过NuGet最近功能添加的导入,以便从 \build 文件夹中自动导入 props/targets 文件

除了我们自己所做的工作外,我们还与一些重要合作伙伴合作,以全面解决这一新方法。我们还没有具体时间表,但每个合作伙伴都和我们对新方法一样兴奋。

  • Team Foundation Service - 它们正在努力将调用nuget.exe restore集成到默认生成方案中。
  • Windows Azure 网站 - 它们正在努力让你将项目推送到 Azure,并在nuget.exe restore生成网站之前调用。
  • TeamCity - 他们正在更新TeamCity 8.x 的 NuGet Installer 插件
  • AppHarbor - 他们正在努力让你将存储库推送到 AppHarbor,并在 nuget.exe restore 解决方案生成之前调用。

与上述每个合作伙伴一起,他们将使用自己的nuget.exe副本,无需在解决方案中携带nuget.exe。

已知问题

在初始 2.7 版本中,nuget.exe还原存在两个已知问题,但它们在 2013 年 9 月 6 日修复了NuGet更新。CommandLine 包。 此更新也可以在 CodePlex 上的 NuGet 2.7 下载页上使用。 正在运行 nuget.exe update -self 将更新到最新版本。

已修复为:

  1. 使用 SLN 文件时,新包还原不适用于 Mono
  2. 新包还原不适用于 Wix 项目

新的包还原工作流也有一个已知问题,即 自动包还原不适用于解决方案文件夹下的项目。 此问题已在 NuGet 2.7.1 中修复。

Project重定向和升级生成错误/警告

在重定目标或升级项目后,你发现某些NuGet包无法正常工作。 遗憾的是,没有迹象表明这一点,也没有有关如何解决它的指南。 使用 NuGet 2.7,我们现在使用一些Visual Studio事件来识别何时重新定位或升级项目的方式会影响已安装的NuGet包。

如果我们检测到任何包都受重定目标或升级的影响,我们将生成即时生成错误,告知你。 除了立即生成错误之外,我们还会在文件中保存requireReinstallation="true"受重定目标影响的所有包的标志packages.config,Visual Studio中的每个后续生成都会为这些包引发生成警告。

虽然NuGet无法采取自动操作来重新安装受影响的包,但我们希望此指示和警告将帮助你发现何时需要重新安装包。 我们还致力于将这些错误消息定向到的 包重新安装指南文档

NuGet配置默认值

许多公司都在内部使用NuGet,但很难指导开发人员使用内部包源,而不是 nuget.org。NuGet 2.7 引入了配置默认值功能,允许为:

  1. 已启用的包源
  2. 已注册但已禁用的包源
  3. 默认nuget.exe推送源

Each of these can now be configured within a file located at %ProgramData%\NuGet\NuGetDefaults.Config. 如果此配置文件指定包源,则不会自动注册默认 nuget.org 包源,而是注册其中的 NuGetDefaults.Config 包源。

虽然不需要使用此功能,但我们希望公司使用 组策略 部署NuGetDefaults.Config文件。

请注意,此功能永远不会导致包源从开发人员的NuGet设置中删除。 也就是说,如果开发人员已使用 NuGet,即意味着已注册 nuget.org 包源,创建 NuGetDefaults.Config 文件后将不会删除此包源。

有关此功能的详细信息,请参阅NuGet配置默认值

重命名默认包源

NuGet始终注册一个名为“NuGet官方包源”的默认包源,指向 nuget.org。这个名称很详细,也没有指定它实际指向的位置。 为了解决这两个问题,我们已将此包源重命名为 UI 中的“nuget.org”。 包源的 URL 也已更改为包含“www.”前缀。 使用 NuGet 2.7 后,现有的“NuGet官方包源”将自动更新为“nuget.org”作为其名称和“”https://www.nuget.org/api/v2/作为其 URL。

性能改进

我们在 2.7 中进行了一些性能改进,这将产生更小的内存占用量、更少的磁盘使用率和更快的包安装速度。 我们还对基于 OData 的源进行了更智能的查询,以减少总体有效负载。

新的扩展性 API

我们在扩展性服务中添加了一些新 API,以填补以前版本中缺少的功能缺口。

IVsPackageInstallerServices

// Checks if a NuGet package with the specified Id and version is installed in the specified project.
bool IsPackageInstalledEx(Project project, string id, string versionString);

// Get the list of NuGet packages installed in the specified project.
IEnumerable<IVsPackageMetadata> GetInstalledPackages(Project project);

IVsPackageInstaller

// Installs one or more packages that exist on disk in a folder defined in the registry.
void InstallPackagesFromRegistryRepository(string keyName, bool isPreUnzipped, bool skipAssemblyReferences, Project project, IDictionary<string, string> packageVersions);

// Installs one or more packages that are embedded in a Visual Studio Extension Package.
void InstallPackagesFromVSExtensionRepository(string extensionId, bool isPreUnzipped, bool skipAssemblyReferences, Project project, IDictionary<string, string> packageVersions);

Development-Only依赖项

此功能由 Adam Ralph 提供,它允许包作者声明仅在开发时使用的依赖项,并且不需要包依赖项。 通过将属性 developmentDependency="true" 添加到包中 packages.confignuget.exe pack 将不再将该包作为依赖项包含在内。

已删除对 Visual Studio 2010 Express for Windows Phone 的支持

2.7 中的新包还原模型由不同于主NuGet VSPackage 的新 VSPackage 实现。 由于技术问题,此新的 VSPackage 在 Visual Studio 2010 Express for Windows Phone SKU 中无法正常工作,因为我们与其他受支持的Visual Studio SKU 共享相同的代码库。 因此,从 NuGet 2.7 开始,我们将从已发布扩展中删除对 Visual Studio 2010 Express for Windows Phone 的支持。 Visual Studio 2010 Express for Web 的支持仍包含在发布到 Visual Studio 扩展库的主扩展中。

由于我们不确定有多少开发人员仍在该版本的Visual Studio中使用NuGet,因此我们将专门为这些用户发布单独的Visual Studio扩展,并在 CodePlex (上发布它,而不是Visual Studio扩展库) 。 我们并不打算继续维护该扩展,但如果这会影响你,请在 CodePlex 上提交问题告知我们。

若要下载 Visual Studio 2010 Express for Windows Phone) NuGet 程序包管理器 (,请访问 NuGet 2.7 下载页。

Bug 修复

除了这些功能,此版本的NuGet还包括许多其他 bug 修复。 发布中共解决了 97 个问题。 有关 NuGet 2.7 中修复的工作项的完整列表,请查看此版本的NuGet问题跟踪器