原文:https://blogs.msdn.microsoft.com/scott_hanselman/2012/07/10/nuget-2-0-net/
[原文发表地址] NuGet 2.0 (.NET Package Manager) released - GO UPGRADE NOW and here's why
[原文发表时间] 2012-06-27 12:51
在我们开始之前,让我们前往http://nuget.org ,然后点击安装 NuGet。其实,只需在这里做。我将要等会儿。
它是一个 2.5兆VSIX 文件,并会采取一分钟来安装。它将适用于 Visual Studio 2010 SP1,以及 Visual Studio 2012 RC。如果您同时安装了这两个版本的话,NuGet 将提示您在所有这两个版本中安装它,如果你愿意的话。
你可能会遇到的奇怪问题
如果您是早期吃螃蟹的人,而且正在测试 Visual Studio 2012 RC的话,首先,谢谢。如果您在VS 2012 RC中看到一个对话框, “Configuring Extensions ",而它似乎永远在那儿,在RTM中,我们修复了一个bug,该bug在最近的NuGet 更新中越来越频繁地出现了。当一个用户在 RC 版本中更新扩展时,该 bug 会间歇性地出现。
在 Visual Studio 2012 RC中,在" Configuring Extensions "挂起的解决方法
- 关闭所有的VS实例
- 检查 HKEY_CURRENT_USERSoftwareMicrosoftVisualStudio11.0ExtensionManagerPendingDeletions 的内容
- 删除每个条目列出的文件夹
- 删除 HKEY_CURRENT_USERSoftwareMicrosoftVisualStudio11.0ExtensionManagerPendingDeletions
99.9%的升级或安装将正常工作。如果你看到任何其它问题,请以管理员身份运行 Visual Studio,转到工具 |扩展管理器,然后卸载 NuGet,然后重新安装.
最常见的安装问题是与 Visual Studio 2010 SP1 的证书不匹配。不幸的是这并不是 NuGet 的 bug,但是你可以在这里获取Visual Studio 修复程序来一劳永逸地解决它http://bit.ly/vsixcertfix。我希望某一天,该修复程序会出现在Windows Update中。无论是安装该修补程序还是以管理员身份卸载/重新安装都可以修复 NuGet 的该问题。
已修复的问题和新功能
这里是一个针对在 NuGet 2.0 版本中被修复的80个问题的完整列表的查询。NuGet 已经超过 14 万个软件包下载,并在库中有超过 6,000 个唯一的软件包。你可以随时在http://stats.nuget.org看到更新过的统计信息.
最好的修复,而且是我亲自推动的是这一问题: NuGet PowerShell Tab Completion是通过慢速连接的,速度缓慢。如果您是使用慢速集合 (我指的是,New Zealand) 或只想提升速度,这是升级 NuGet的足够理由。
之前,键入Install-Package jQuery.[TAB] 会导致 HTTP 调用Odata, 那将返回比需要的更多数据。我一直在为那些不在美国 35 兆连接的家伙争取。通常是因为我在那边通过 3g 拉取数据。
在NuGet 2.0中键入Install-Package Jquery.[TAB] ,它会制作一个像这样的快速 JSON 调用:
GET /api/v2/package-ids?partialId=jQuery. HTTP/1.0
在此例中,它会返回JSON 的603 个字节,正如它应该返回的。它是快速的。
1: ["jQuery.Ajax.Unobtrusive",
2: "jQuery.ba-throttle-debounce",
3: ...,
4: "jQuery.LiveQuery",
5: "jQuery.MaskedInput",
6: "jQuery.Meow"]
你会获得一个不错的针对软件包的Intellisense。
新功能
NuGet 2.0 不仅速度更快,而且还有一些新的功能,比如通过目标框架对依赖项进行分组。您可以更改您的依赖。那样一个软件包可以服务于.NET 2 和.NET 4,但每个目标框架都需要不同的软件包。下面是一个示例:
1: <dependencies>
2: <group>
3: <dependency id="RouteMagic" version="1.1.0" />
4: </group>
5:
6: <group targetFramework="net40">
7: <dependency id="jQuery" />
8: <dependency id="WebActivator" />
9: </group>
10:
11: <group targetFramework="sl30">
12: </group>
13: </dependencies>
来自文档:
请注意一个组可以包含零依赖关系。在上面的示例中,如果该软件包被安装到一个指向 Silverlight 3.0 或更高版本的项目中,那么没有依赖项被安装。如果该软件包被安装到一个指向.NET 4.0 或更高版本的项目中,就有两个依赖项,jQuery 和 WebActivator,将被安装。如果该软件包被安装到一个指向这2 个框架的早期版本或任何其他框架的项目中,那么RouteMagic 1.1.0将被安装。组之间没有继承。如果项目的目标框架与一个组的targetFramework属性相匹配的话,只有该组中的依赖项才被安装。
更好的事情是,您现在可以根据目标框架对PowerShell 脚本,以及内容文件来进行分组。具体可运行的脚本取决于您的版本和可以包含具体的内容文件。这将使用您对依赖项使用的相同的目录层次结构,现在它适用于 /content 和 /tools。
打开"生成期间允许 NuGet 下载缺失的软件包"让你的生活更轻松
最后,应注意,您必须至少一次显式地给予"还原软件包"以确定,以便让 NuGet 为你获取一堆依赖项。通常你想要编译一个大项目,或许该项目包括一个packages.config,但不是软件包本身 (例如,您不希望将二进制的软件包签入到源代码管理中) 因此,在生成时,NuGet 将恢复缺失的软件包。你只需要做一次以满足要求.
偷窥一些UI 功能 (感谢 Mads !)
你知道Visual Studio2012中新的 Ctrl-Q"搜索所有命令"功能吗?我在Mads 的计算机上看到一个NuGet的每日生成的改进,它不仅搜索 Visual Studio 本地的命令,而且也搜索 Visual Studio库和 NuGet 软件包。如果你喜欢此功能,请留下评论,我会对Mads施加压力的。或者,你会。;)
大型软件包重命名
我们已经更改了一堆软件包的名称 (并转发了旧名称), 所以逻辑上至少更多倾向Microsoft。例如,这里是 Microsoft.AspNet … …
此 RC 版本中,所有参与在 ASP.NET 产品中的 NuGet 软件包都被重命名了。我们内部称它为"大型软件包重命名2012。"这里是旧的软件包名称与新的软件包名称之间的映射。在此列表中,旧的名称引用了产品的先前版本,包括与 VS 11 beta 版附带推出的Beta版。
旧的软件包 |
新的软件包 |
AspNetMvc |
Microsoft.AspNet.Mvc |
AspNetRazor.Core |
Microsoft.AspNet.Razor |
AspNetWebApi |
Microsoft.AspNet.WebApi |
AspNetWebApi.Core |
Microsoft.AspNet.WebApi.Core |
AspNetWebApi.SelfHost |
Microsoft.AspNet.WebApi.SelfHost |
AspNetWebPages.Core |
Microsoft.AspNet.WebPages |
AspNetWebPages |
Microsoft.AspNet.WebPages.Administration |
jQuery.Ajax.Unobtrusive |
Microsoft.jQuery.Unobtrusive.Ajax |
jQuery.Validation.Unobtrusive |
Microsoft.jQuery.Unobtrusive.Validation |
Microsoft.Web.Optimization |
Microsoft.AspNet.Web.Optimization |
SqlServerCompact |
Microsoft.SqlServer.Compact |
System.Net.Http |
Microsoft.Net.Http |
System.Net.Http.Formatting |
Microsoft.AspNet.WebApi.Client |
System.Web.Providers |
Microsoft.AspNet.Providers |
System.Web.Providers.Core |
Microsoft.AspNet.Providers.Core |
System.Web.Providers.LocalDb |
Microsoft.AspNet.Providers.LocalDb |
System.Web.Providers.SqlCE |
Microsoft.AspNet.Providers.SqlCE |
我们希望其它公司 (和Microsoft内部的其他团队) 将遵循相同的标准命名结构