单个 .exe 文件太大
Single .exe file is too large
我正在尝试在 C# 中创建单个文件可执行文件。但是我不喜欢文件有多大。一个简单的 Hello World 程序本身有 20mb。有没有什么好的方法可以缩小它的大小,也许是通过删除程序不使用的东西。
下面是我的 Hello World 测试程序的 .csproj 文件。我还想声明我正在 Release 模式下编辑,如果这有所不同的话
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<PublishSingleFile>true</PublishSingleFile>
<PublishTrimmed>true</PublishTrimmed>
<IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>
首先,如果可以,请尝试升级到 .NET 6。修剪后的 self-contained single-file .NET 6 Hello World 控制台应用程序约为 11MB,而不是 20MB。
要更进一步,您可以尝试禁用框架功能:https://docs.microsoft.com/en-us/dotnet/core/deploying/trimming/trimming-options#trimming-framework-library-features
您可以压缩程序集,尽管这会在运行时带来性能成本:https://docs.microsoft.com/en-us/dotnet/core/deploying/single-file/overview#compress-assemblies-in-single-file-app
如果您需要更进一步,很快您就可以使用 NativeAOT 进行 AOT 编译;这将构建更小的可执行文件,因为它们不需要包含 JIT 编译器。 NativeAOT 将随 .NET 7 一起发布;请密切关注 .NET 7 预览版以获取说明。
您可能会发现此博客 post 的主题很有用:https://www.awise.us/2021/06/05/smallest-dotnet.html
我正在尝试在 C# 中创建单个文件可执行文件。但是我不喜欢文件有多大。一个简单的 Hello World 程序本身有 20mb。有没有什么好的方法可以缩小它的大小,也许是通过删除程序不使用的东西。
下面是我的 Hello World 测试程序的 .csproj 文件。我还想声明我正在 Release 模式下编辑,如果这有所不同的话
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<PublishSingleFile>true</PublishSingleFile>
<PublishTrimmed>true</PublishTrimmed>
<IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>
首先,如果可以,请尝试升级到 .NET 6。修剪后的 self-contained single-file .NET 6 Hello World 控制台应用程序约为 11MB,而不是 20MB。
要更进一步,您可以尝试禁用框架功能:https://docs.microsoft.com/en-us/dotnet/core/deploying/trimming/trimming-options#trimming-framework-library-features
您可以压缩程序集,尽管这会在运行时带来性能成本:https://docs.microsoft.com/en-us/dotnet/core/deploying/single-file/overview#compress-assemblies-in-single-file-app
如果您需要更进一步,很快您就可以使用 NativeAOT 进行 AOT 编译;这将构建更小的可执行文件,因为它们不需要包含 JIT 编译器。 NativeAOT 将随 .NET 7 一起发布;请密切关注 .NET 7 预览版以获取说明。
您可能会发现此博客 post 的主题很有用:https://www.awise.us/2021/06/05/smallest-dotnet.html