.NET Core 3.0
.NET Core 3.0 supports it out of the box. It packs all stuff in one .exe
file (~68 MB for a basic console app). There is PublishTrimmed=true
option that can decrease size to ~28 MB by analyzing static code references and excluding unused framework assemblies from the final build.
To configure single exe
build edit your csproj
file:
<PropertyGroup>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<PublishSingleFile>true</PublishSingleFile>
</PropertyGroup>
or on the command line in a folder with csproj
file:
dotnet publish -r win-x64 -p:PublishSingleFile=true
For more details see a great answer given by Gopi.
Standalone utils
Warp
(thanks to Darien Shannon for mentioning it in the comment) and dotnet CoreRT
. Both work with previous versions of .Net Core also
It is a tool similar to ILMerge for the classic .NET Framework
. It is very easy to use. For the basic console app, It can produce .exe
~35 MB without tree shaker and around 10-15 MB with tree shaker.
For now, you can try to pre-compile the application into a native single-file executable using dotnet CoreRT
project. I'm saying "try" because documentation says:
This project is in the early stages of its development.
Nevertheless, it works at least for simple applications. See the sample here.
According to its description, you need to run the following command in the project folder:
dotnet new nuget
This will add a nuget.config file to your application. Open the file
and in the element under add the following:
<add key="dotnet-core" value="https://dotnet.myget.org/F/dotnet-core/api/v3/index.json" />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
Then run this:
dotnet add package Microsoft.DotNet.ILCompiler -v 1.0.0-alpha-*
Then run this:
dotnet publish -r win-x64 -c release
Once completed, you can find the native executable in the root folder
of your project under /bin/x64//netcoreapp2.0/publish/
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…