NuGet程序包中不必要的文件夹

时间:2018-07-10 06:26:00

标签: c# nuget-package

我的c#应用程序目标框架是4.6.2

enter image description here

我从NuGet下载了一些软件包,我的问题:

当我在文件资源管理器中打开我的应用程序时,在packages \ somepackage \ lib下,我有以下内容:

enter image description here

我真的需要net 40和net45文件夹吗?

我可以删除吗?我怎么知道什么是不必要的?

1 个答案:

答案 0 :(得分:1)

为什么NuGet保留文件夹

Nuget使用两种不同的方法来管理每个项目的软件包:

  1. packages.config
  2. PackageReference

packages.config仅用于无法自动导入和引用NuGet程序包的旧项目文件。 NuGet将更改* .csproj文件以添加引用。因为它更改了受版本控制且不能使用绝对路径的代码,所以应将NuGet程序包缓存文件夹放在每个解决方案中。在这种情况下,NuGet可以删除无用的文件夹。 但是,这是旧版NuGet版本(版本2.x)的行为。 NuGet不想修复遗留行为。

PackageReference是NuGet引用的新行为。 NuGet将所有NuGet缓存放在一个公用文件夹中,这样同一NuGet软件包就不会占用太多磁盘空间。在这种情况下,NuGet不会知道整个计算机项目中的每个lib版本,因此它无法删除无用版本文件夹。

结论::NuGet不知道在PacakgeReference中删除它们是否安全,也不想在packages.config中删除它们。

packages.config升级到PackageReference


更新: 从Visual Studio 2017 15.7版开始,提供了一项集成功能,使您无需使用第三方工具Migrate from packages.config to PackageReference

即可进行此升级

在解决方案资源管理器中,右键单击“引用”节点或packages.config文件,然后选择“将packages.config迁移到PackageReference ...


您可以尝试使用Visual Studio扩展NuGet PackageReference Upgrader来将packages.config升级到PackageReference,这样它就不会在每个解决方案文件夹中存储库,以免占用磁盘空间。

Ps。

NuGet在我的C:\上带了将近10GB的内存。

NuGet package cache folder