NuGet 2.0 发行说明 | NuGet 2.2 发行说明
NuGet 2.1 于 2012 年 10 月 4 日发布。
分层 Nuget.Config
NuGet 2.1 使你能够更灵活地控制 NuGet 设置,方法是以递归方式浏览查找 NuGet.Config 文件的文件夹结构,然后从所有找到的文件集生成配置。 例如,考虑一下这样的场景:一个团队有一个内部包存储库,用于这些内部依赖项进行 CI 构建。 单个项目的文件夹结构可能如下所示:
C:\
C:\myteam\
C:\myteam\solution1
C:\myteam\solution1\project1
此外,如果为解决方案启用了包还原,则还会存在以下文件夹:
C:\myteam\solution1\.nuget
为了使团队的内部包存储库可用于团队工作的所有项目,同时不使其可用于计算机上的每个项目,我们可以创建新的 Nuget.Config 文件并将其放置在 c:\myteam 文件夹中。 无法为每个项目指定包文件夹。
<configuration>
<packageSources>
<add key="Official project team source" value="http://teamserver/api/v2/" />
</packageSources>
<disabledPackageSources />
<activePackageSource>
<add key="Official project team source" value="http://teamserver/api/v2/" />
</activePackageSource>
</configuration>
现在,我们可以看到源是通过从 c:\myteam 下的任何文件夹中运行“nuget.exe sources”命令添加的,如下所示:
NuGet.Config 按以下顺序搜索文件:
.nuget\Nuget.Config- 从项目文件夹递归遍历到根目录
- 全球
Nuget.Config(%appdata%\NuGet\Nuget.Config)
这些配置按反序应用,这意味着根据上述顺序,首先应用全局 Nuget.Config,然后应用从根文件夹到项目文件夹的已发现的 Nuget.Config 文件,最后是.nuget\Nuget.Config。 如果使用 <clear/> 元素从配置中删除一组项,这一点尤其重要。
指定“packages”文件夹位置
在过去,NuGet 从解决方案根文件夹下一个已知的“packages”文件夹中管理解决方案的包。 对于安装了 NuGet 包的许多不同的解决方案的开发团队,这可能会导致在文件系统上的许多不同位置安装同一个包。
NuGet 2.1 通过 repositoryPath 文件中的元素 NuGet.Config 更精细地控制包文件夹的位置。 基于前面的分层 Nuget.Config 支持示例,假设我们希望在 C:\myteam\ 下的所有项目共享同一个包文件夹。 为此,只需将以下条目添加到 c:\myteam\Nuget.Config。
<configuration>
<config>
<add key="repositoryPath" value="C:\myteam\teampackages" />
</config>
...
</configuration>
在此示例中,无论深度如何,共享 Nuget.Config 文件都会为在 C:\myteam 下创建的每个项目指定一个共享包文件夹。 请注意,如果解决方案根目录下有一个现有包文件夹,则需要先将其删除,然后 NuGet 才会在新位置放置包。
支持可移植库
可移植库 是 .NET 4 首先引入的功能,可用于生成可在不同Microsoft平台上工作的程序集,从 the.NET Framework 版本到 Silverlight 到 Windows Phone,甚至 Xbox 360(虽然目前,NuGet 不支持 Xbox 可移植库目标)。 通过扩展框架版本和配置文件的 包约定 ,NuGet 2.1 现在支持可移植库,使你能够创建包含复合框架和配置文件目标 lib 文件夹的包。
例如,请考虑以下可移植类库的可用目标平台。
生成库并运行命令 nuget.exe pack MyPortableProject.csproj 后,可以通过检查生成的 NuGet 包的内容来查看新的可移植库包文件夹结构。
如你所看到的,可移植库文件夹名称约定遵循模式“portable-{framework 1}+{framework n}”,其中框架标识符遵循现有的 框架名称和版本约定。 在用于 Windows Phone 的框架标识符中找到名称和版本约定的一个例外。 此标识应使用框架名称“wp”(wp7、wp71 或 wp8)。 例如,使用“silverlight-wp7”将导致错误。
安装从此文件夹结构创建的包时,NuGet 现在可以将其框架和配置文件规则应用于多个目标,如文件夹名称中指定的。 NuGet 匹配规则背后的原则是“更具体”的目标优先于“不太具体”的目标。 这意味着,如果特定平台与项目兼容,面向特定平台的名字对象将始终优先于可移植平台。 此外,如果多个可移植目标与项目兼容,NuGet 将首选支持的平台集“最接近”引用包的项目。
面向 Windows 8 和 Windows Phone 8 项目
除了添加对面向可移植库项目的支持外,NuGet 2.1 还为 Windows 8 应用商店和 Windows Phone 8 项目提供了新的框架名字对象,以及 Windows 应用商店和 Windows Phone 项目的新常规名字对象,这些名字对象在各个平台的未来版本中更易于管理。
对于 Windows 8 应用商店应用程序,标识符如下所示:
| NuGet 2.0 及更早版本 | NuGet 2.1 |
|---|---|
| winRT45, .NETCore45 | Windows,Windows8,win,win8 |
对于 Windows Phone 项目,标识符如下所示:
| 手机操作系统 | NuGet 2.0 及更早版本 | NuGet 2.1 |
|---|---|---|
| Windows Phone 7 | silverlight3-wp | wp、wp7、WindowsPhone、WindowsPhone7 |
| Windows Phone 7.5 (芒果) | Silverlight 4 - WP7.1 | wp71、WindowsPhone71 |
| Windows Phone 8 | (不支持) | wp8、WindowsPhone8 |
在上述所有更改中,NuGet 2.1 将继续完全支持旧框架名称。 今后,应使用新名称,因为它们将在各个平台的未来版本中更加稳定。 但是,新名称在 2.1 之前的 NuGet 版本中将不受支持,因此请相应地规划何时进行切换。
改进了“包管理器”对话框中的搜索
在过去几次迭代中,NuGet 库引入了更改,大大提高了包搜索的速度和相关性。 但是,这些改进仅限于 nuget.org 网站。 NuGet 2.1 通过 NuGet 包管理器对话框提供改进的搜索体验。 例如,假设你想要找到 Windows Azure 缓存预览版包。 此包的合理搜索查询可能是“Azure 缓存”。 在包管理器对话框的早期版本中,所需的包甚至不会在结果的第一页上列出。 但是,在 NuGet 2.1 中,所需的包现在显示在搜索结果顶部。
对包进行强制更新
在 NuGet 2.1 之前,NuGet 会在版本号不高时跳过更新包。 这在特定情境中引入了阻力,尤其是在软件构建或持续集成(CI)场景中,团队不想在每次构建时都增加包的版本号。 所需的行为是无论如何都要强制更新。 NuGet 2.1 使用“重新安装”标志解决此问题。 例如,当尝试更新没有更高版本的包时,NuGet 的早期版本会导致以下情况:
PM> Update-Package Moq
No updates available for 'Moq' in project 'MySolution.MyConsole'.
使用重新安装标志,无论是否有较新版本,包都将更新。
PM> Update-Package Moq -Reinstall
Successfully removed 'Moq 4.0.10827' from MySolution.MyConsole.
Successfully uninstalled 'Moq 4.0.10827'.
Successfully installed 'Moq 4.0.10827'.
Successfully added 'Moq 4.0.10827' to MySolution.MyConsole.
另一个重新安装标志非常有用的场景是框架重新定位。 更改项目的目标框架(例如,从 .NET 4 更改为 .NET 4.5)时,Update-Package -Reinstall 可以更新对项目中安装的所有 NuGet 包的正确程序集的引用。
在 Visual Studio 中编辑包源
在以前版本的 NuGet 中,从 Visual Studio 选项对话框中更新包源需要删除并重新添加包源。 NuGet 2.1 通过支持更新作为配置用户界面的第一类函数来改进此工作流。
漏洞修复
NuGet 2.1 包含许多 bug 修复。 NuGet 2.0 中修复的工作项完整列表,请查看 [NuGet Issue Tracker for this release](http://nuget.codeplex.com/workitem/list/advanced?keyword=&status=Fixed&type=All&priority=All&release=NuGet%202.1&assignedTo=All&component=All&sortField=LastUpdatedDate&sortDirection=Descending&page=0)。