我的c#应用程序目标框架是4.6.2
我从NuGet下载了一些软件包,我的问题:
当我在文件资源管理器中打开我的应用程序时,在packages \ somepackage \ lib下,我有以下内容:
我真的需要net 40和net45文件夹吗?
我可以删除吗?我怎么知道什么是不必要的?
答案 0 :(得分:1)
Nuget使用两种不同的方法来管理每个项目的软件包:
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
,这样它就不会在每个解决方案文件夹中存储库,以免占用磁盘空间。
NuGet在我的C:\
上带了将近10GB的内存。