我正在尝试在 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>
首先,如果可以的话,尝试升级到 .NET 6。修剪后的独立单文件 .NET 6 Hello World 控制台应用程序约为 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 -文件应用程序
如果您需要更进一步,很快您就可以使用 NativeAOT 进行 AOT 编译;这将构建更小的可执行文件,因为它们不需要包含 JIT 编译器。 NativeAOT 将随 .NET 7 一起发布;请关注 .NET 7 预览版以获取说明。
您可能会发现有关该主题的这篇博客文章很有用:https://www.awise.us/2021/06/05/smallest-dotnet.html
此命令发布适用于 Windows 64 位的 .NET 应用程序,创建单个可执行文件,而不在应用程序中包含 .NET 运行时。这有助于减少分发的可执行文件的大小。
dotnet publish -r win-x64 -p:PublishSingleFile=true --self-contained false