我非常了解Visual Studio 2010,当我开始使用Visual Studio 2012 时,我注意到它会自动使用我以前没有使用过的Nuget,我只知道它是一个从互联网上获取库的包管理器。例如,当我创建一个空的 ASP.NET MVC 4 项目时,该项目将包含一个包含 11 个条目的 packages.config 文件,并且在解决方案文件夹下将有一个包含 11 个库的 packages 目录。
这是我没有得到的东西。
第一个可能是一个反问,但为什么呢?即使是一个空的项目也包含 10+ MB 的包,即使我不使用任何包,看起来也很愚蠢。
例如,包下有一个 System.Web.Mvc.dll。但它也在我的 GAC 中,我认为它是 .NET 框架的一个组成部分。两者都是完全相同的版本 (4.0.20710.0),但文件不同。为什么我的项目使用 Nuget 的这个 DLL 而不是 .NET/GAC?为什么文件不一样?如果我将我的项目部署到 IIS 服务器,也会有这个 DLL 的副本,因此将这些 DLL 作为项目的一部分似乎完全没用。更不用说它使我的部署包臃肿。
顺便说一下膨胀。有一个对 Newtonsoft.Json.4.5.11 的引用,它本身有 8+ MB,因为它包含 .NET 2、3.5、4、Silverlight 和任何相同版本的东西,总共 9 个。当我创建我的项目时,我指定我想使用 .NET 4.5,所以我很困惑为什么所有这些东西都在我的硬盘上。
最后,这个 Nuget 东西与我的项目或解决方案有什么关系?我在 VS 中看不到包文件夹,我在 .sln 文件中看不到任何提及它。该项目确实包含文件 packages.config,但它与构建过程没有任何关系,看起来像是死重。我问这个是因为如果有一些对 Nuget 的引用,我可以很容易地删除它,但是没有引用,所以我感到困惑。