减少编译为 Wasm 的 .NET 占用空间

问题描述 投票:0回答:1

我正在使用 Mono 将 C# 编译为 Wasm,以便在浏览器中使用它。运行以下命令会生成一堆 DLL、一个 wasm 文件和一些 JS 文件。

csc /target:library -out:regex101.dll \
    /noconfig /nostdlib \
    \
    /r:$WASM_SDK/wasm-bcl/wasm/mscorlib.dll \
    /r:$WASM_SDK/wasm-bcl/wasm/System.dll \
    /r:$WASM_SDK/wasm-bcl/wasm/Facades/netstandard.dll \
    /r:$WASM_SDK/framework/WebAssembly.Bindings.dll \
    \
    regex101.cs

mono $WASM_SDK/packager.exe \
    --copy=always --out=./publish \
    regex101.dll

如果我在网页中包含这些生成的 js 文件,我可以在浏览器中运行转换后的代码。然而,最终的大小(大约 23 个 dll + JS + Wasm)总共大约 15mb,这是非常大的,我相信这是因为没有运行死代码消除,并且包含了大量的框架。

有人建议我运行链接器(参见 https://github.com/firasdib/Regex101/issues/156#issuecomment-497281517)来执行死代码消除,但作为 .NET 新手,我是,我不知道该怎么做。

任何帮助将不胜感激。

c# .net mono webassembly
1个回答
0
投票

OpenAI 的 ChatGPT 回答了这个问题:

可以使用Mono运行时提供的链接器工具对编译后的代码进行死码剔除。以下是要遵循的步骤: 1. 如果尚未安装 Mono 运行时,请在您的系统上安装它。您可以从官方网站下载最新版本的 Mono 运行时:https://www.mono-project.com/download/ 2. 在已编译的 DLL 文件上运行链接器工具以删除任何未使用的代码。链接器工具获取输入 DLL 列表并生成一个仅包含实际使用的代码的输出 DLL。运行链接器工具的命令是:

mono $WASM_SDK/linker.exe -o output.dll input.dll

将 output.dll 替换为要创建的输出 DLL 文件的名称,并将 input.dll 替换为要包含在输出中的每个输入 DLL 文件的名称。您可以在命令行上指定多个输入 DLL 文件。 3. 从链接器工具获得输出 DLL 文件后,您可以像以前一样使用打包工具使用它来生成 wasm 和 JS 文件:

mono $WASM_SDK/packager.exe --copy=always --out=./publish output.dll

这将生成可以包含在网页中的 wasm 和 JS 文件。通过运行链接器工具,您应该能够通过删除任何未使用的代码来显着减小编译代码的大小。

© www.soinside.com 2019 - 2024. All rights reserved.