Is there a way to make a console application run using only a single file in .NET Core?
Update 2018: .NET Core 3.0 aims to enable a new scenario: packing the .NET Core runtime and all application dependencies into a single executable.
At the moment, there are no fail-safe methods to create a single executable file. Since there are a lot of type-forwarding dll files involved, even ILMerge and similar tools might not produce correct results (though this might improve, the problem is that those scenarios haven't undergone extensive testing, esp. in production applications)
There are currently two ways to deploy a .NET Core application:
- As a "portable application" / "framework-dependent application", requiring a
dotnet
executable and installed framework on the target machine. Here, theXYZ.runtimeconfig.json
is used to determine the framework version to use and also specifies runtime parameters. This deployment model allows running the same code on various platforms (windows, linux, mac) - As a "self-contained application": Here the entire runtime is included in the published output and an executable is generated (e.g.
yourapp.exe
). This output is specific to a platform (set via a runtime identifier) and can only be run on the targeted operating system. However, the produced executable is only a small shim that boots the runtime and loads the app's main dll file. This also allows anXYZ.runtimeconfig.json
to set additional runtime properties like garbage collection settings.(think of it as a "new"app.config
file)
In the future, the CoreRT runtime – which is still under development at the time of writing – aims to allow creating a single pre-compiled native executable that is specific to a runtime and does not require any other files.
How to run .NET Core console application from the command line
If it's a framework-dependent application (the default), you run it by dotnet yourapp.dll
.
If it's a self-contained application, you run it using yourapp.exe
on Windows and ./yourapp
on Unix.
For more information about the differences between the two app types, see the .NET Core Application Deployment article on .NET documentation.
Build .NET Core console application to output an EXE
For debugging purposes, you can use the DLL file. You can run it using dotnet ConsoleApp2.dll
. If you want to generate an EXE file, you have to generate a self-contained application.
To generate a self-contained application (EXE in Windows), you must specify the target runtime (which is specific to the operating system you target).
Pre-.NET Core 2.0 only: First, add the runtime identifier of the target runtimes in the .csproj file (list of supported RIDs):
<PropertyGroup>
<RuntimeIdentifiers>win10-x64;ubuntu.16.10-x64</RuntimeIdentifiers>
</PropertyGroup>
The above step is no longer required starting with .NET Core 2.0.
Then, set the desired runtime when you publish your application:
dotnet publish -c Release -r win10-x64
dotnet publish -c Release -r ubuntu.16.10-x64
I have created HelloWorld console application using .net core 3.1 Which file should I deploy to Linux so that I can run the console application there?
Specify the runtime using the --runtime
flag with dotnet build
dotnet build --runtime rhel.7-x64
Related Topics
How to Get Character for a Given Ascii Value
Wpf: the Name Does Not Exist in the Namespace
Child Actions Are Not Allowed to Perform Redirect Actions, After Setting the Site on Https
Multiple Controller Types with Same Route Prefix ASP.NET Web API
C# Form.Transparencykey Working Different for Different Colors, Why
Print Fixeddocument/Xps to PDF Without Showing File Save Dialog
How to Find Control in Edit Item Template
Set Item Focus in Listview Wpf
Broadcastblock with Guaranteed Delivery in Tpl Dataflow
Set Dllimport Attribute Dynamically
Datagrid Column Width Doesn't Auto-Update
How to Get a Dimension (Slice) from a Multidimensional Array