单个 .exe 文件过大

4
我正在尝试在C#中创建一个单文件可执行程序。但是,我不喜欢文件的大小。一个简单的Hello World程序本身就有20MB。有没有一种好的方法来缩小这个文件的大小,也许是通过删除程序不使用的东西。
以下是我用于Hello World测试程序的.csproj文件。我还想说明一下,我是在发布模式下进行编辑的,如果这有所区别。
    <OutputType>Exe</OutputType>
    <TargetFramework>net5.0</TargetFramework>
    <RuntimeIdentifier>win-x64</RuntimeIdentifier>

    <PublishSingleFile>true</PublishSingleFile>
    <PublishTrimmed>true</PublishTrimmed>
    <IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>

1
您可以使用不变的全球化模式,它会移除一些您可能不关心的全球化内容。您也可以停止捆绑.NET运行时,这将显著减小大小,但这当然意味着需要通过其他方式在用户的计算机上安装它。 - canton7
1
20MB很大吗?许多Python程序员仍然使用PyInstaller将其脚本(几KB)打包成100MB的可执行文件。每个硬币都有两面。 - Lei Yang
不确定为什么您看到的是20MB,但可能是因为您正在使用.NET 5。如果我在一个经过修剪的单文件.NET 6 Hello World项目上运行dotnet publish --configuration=Release,它的大小为11MB。 - Reilly Wood
1个回答

6

首先要尝试升级到.NET 6,如果可以的话。一个裁剪后的.NET 6控制台应用只有约11MB大小,而不是20MB。

如果想进一步缩小文件大小,可以尝试禁用框架功能: https://learn.microsoft.com/en-us/dotnet/core/deploying/trimming/trimming-options#trimming-framework-library-features

您可以压缩程序集,但这会在运行时产生性能损失: https://learn.microsoft.com/en-us/dotnet/core/deploying/single-file/overview#compress-assemblies-in-single-file-app

如果需要更进一步,很快就能使用NativeAOT进行AOT编译;这将构建更小的可执行文件,因为它们不需要包含JIT编译器。NativeAOT将随.NET 7一起发布,请关注.NET 7预览版本的说明。

您可能会发现这篇关于该主题的博客文章很有用:https://www.awise.us/2021/06/05/smallest-dotnet.html


谢谢您的回答和提供的链接,它们对我解决问题非常有帮助。 - user18476469

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接