【发布时间】:2023-03-11 04:13:01
【问题描述】:
我正在尝试使用由 ASP.NET Core 托管的 Blazor WebAssembly。实现一个页面后,我在 Chrome DevTools 中看到许多不必要的 dll 被传输到客户端。 有一个情况的例子。假设我们在解决方案中有以下项目结构:
BlazorApp.Client (contains Blazor pages)
Reference to BlazorApp.Shared
BlazorApp.Server (contains ASP.NET core)
Reference to BlazorApp.Client
Reference to BlazorApp.Shared
BlazorApp.Shared (contains shared classes)
Reference to ClassLibrary
ClassLibrary (contains some more shared classes)
NuGet reference to AWSSDK.Core
MyEnum.cs (enum, which is used in Blazor page; not using AWS SDK)
所以基本上BlazorApp.Shared 项目引用了其他一些项目,这些项目可能有很多 nuget 包。 repo https://github.com/GTmAster/blazor-treeshake中提供了重现该问题的最低代码
我的假设是 Mono Linker 在发布版本中进行了摇树,因此所有未使用的代码和库都将从生成的 Web 程序集中排除。
但是当我运行我的应用程序时,我看到它从服务器加载了AWSSDK.Core.dll:
BlazorApp.Client 中的代码没有使用它,BlazorApp.Server 和 BlazorApp.Shared 中的代码也没有使用它。仅加载它,因为它在ClassLibrary 中被引用。
我对 Mono Linker 摇树有什么误解吗?
排除此 dll 的唯一方法是将MyEnum 移动到BlazorApp.Shared 并破坏BlazorApp.Shared -> ClassLibrary 参考吗?
【问题讨论】:
-
您找到删除这些库的方法了吗?
-
@lilo.jacob 否。这是我们决定在项目中不使用 Blazor 的原因之一。
-
嗨。查看有关更小更快的 blazor 应用程序的视频:youtube.com/watch?v=Jte_VwsSazs