【问题标题】:Huge package directory .NET solution庞大的包目录.NET解决方案
【发布时间】:2018-06-27 12:13:01
【问题描述】:

我开发了一个 asp.net mvc 应用程序来管理我们组织中的一些业务流程。此应用程序使用以下主要框架:

  • Asp.NET MVC 5.0;
  • 用于管理数据库访问的实体框架 6.0;
  • MS Identity 2.0 用于管理安全性:用户、角色、访问权限...;
  • 引导程序;

我注意到这个解决方案的包目录变得非常大(超过 350 MB)。 我尝试使用 ReShaper 的“删除未使用的包”功能,但它并没有显着减小包文件夹的大小。我认为必须删除一些不必要的软件包。所以,我的问题是:

  1. 对于简单的 asp.net MVC 解决方案来说,包目录大小超过 350 MB 是否正常?

  2. 如何减小此目录的大小并删除所有未使用和不必要的包?

感谢您的帮助。

【问题讨论】:

  • 由于尺寸大,您遇到了什么实际问题?
  • 包大一点没关系,不知道为什么要缩小?如果你从包目录中删除,VS 会自动恢复丢失的包
  • 我只想拥有一个尽可能小的应用程序。我注意到有些软件包是重复安装的(比如 EntityFramework.6.1.0 和 EntityFramework.6.1.3)。所以,我只是想知道是否有一些技巧可以清理“包”目录。

标签: c# asp.net-mvc asp.net-identity


【解决方案1】:

现在是 2018 年,磁盘空间很便宜,350 MB 并不“巨大”。

这些包中有大量元数据,每个包都以.nupkg 的形式存在,并以提取的形式存在,使其大小加倍(除非用于包的 ZIP 压缩)。因此,如果像 MVC 5.2 这样的包为 300 KB,其提取大小为 1.5 MB,那么一个包的总大小已经接近 2 MB。而且您可能有几十个(如果不是更多的话)包,每个包都占用自己的磁盘空间。

只有当您团队中的其他人升级软件包然后您拉取他们的版本时,这才会成为问题,您的软件包目录仍然包含旧版本以及新版本。

因此,如果发生这种情况,定期清理您的包目录会有所帮助。然后只会再次下载当前使用的包。

一个解决方案中安装的多个版本的软件包也会导致旧版本与新版本共存;一次升级解决方案的所有包(“管理解决方案的 NuGet 包”)或在“合并”选项卡上合并它们。这可确保所有项目都引用相同的包版本。

【讨论】:

    【解决方案2】:

    我的一个项目中包含的包为 450Mb,可以按需要正常工作且没有问题。所以我不会那么担心你的 350Mb。

    如果 Resharper 无法删除任何未使用的软件包,则表明它们都在您的应用程序中的某个时间点被使用。 How can you find the unused NuGet packages in a solution? 是一篇关于 Resharpers 工具的有用帖子。

    请注意,您还可以使用 Visual Studio 扩展 ResolveUR - Resolve Unused References

    如果正在使用包,则项目将在尝试构建时中断,并且包已被删除。

    【讨论】:

      【解决方案3】:

      我使用删除除英语以外的语言和我不使用的 Android/Xamarin 之类的语言的脚本大大减小了大小:

      FOR /F %%G IN ('DIR packages\ru /B /A:D /S') DO RMDIR /S /Q "%%G"
      FOR /F %%G IN ('DIR packages\ja /B /A:D /S') DO RMDIR /S /Q "%%G"
      FOR /F %%G IN ('DIR packages\de /B /A:D /S') DO RMDIR /S /Q "%%G"
      FOR /F %%G IN ('DIR packages\fr /B /A:D /S') DO RMDIR /S /Q "%%G"
      FOR /F %%G IN ('DIR packages\es /B /A:D /S') DO RMDIR /S /Q "%%G"
      FOR /F %%G IN ('DIR packages\it /B /A:D /S') DO RMDIR /S /Q "%%G"
      FOR /F %%G IN ('DIR packages\ko /B /A:D /S') DO RMDIR /S /Q "%%G"
      FOR /F %%G IN ('DIR packages\zh* /B /A:D /S') DO RMDIR /S /Q "%%G"
      FOR /F %%G IN ('DIR packages\monoandroid* /B /A:D /S') DO RMDIR /S /Q "%%G"
      FOR /F %%G IN ('DIR packages\sl* /B /A:D /S') DO RMDIR /S /Q "%%G"
      FOR /F %%G IN ('DIR packages\wp* /B /A:D /S') DO RMDIR /S /Q "%%G"
      

      【讨论】:

        猜你喜欢
        • 2014-09-04
        • 2018-01-07
        • 2017-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-28
        • 2019-04-22
        • 1970-01-01
        相关资源
        最近更新 更多