Complete Guide to Building .NET Core Console Applications with EXE Output

Nov 22, 2025 · Programming · 14 views · 7.8

Keywords: .NET Core | Console Application | EXE Generation | Self-Contained Application | Runtime Identifier

Abstract: This article provides a comprehensive guide to generating executable EXE files in .NET Core, focusing on the construction process of self-contained applications. It covers the complete workflow from project configuration to publishing commands, explains the role of Runtime Identifiers (RIDs), and compares the advantages and disadvantages of different deployment modes. Through specific code examples and command-line operations, it helps developers understand how to create standalone executable files for target platforms.

Introduction

During .NET Core development, many developers encounter a common issue: how to generate platform-specific executable files (EXE). Unlike traditional .NET Framework, .NET Core adopts a new build and deployment model, which causes confusion for some developers when generating EXE files. This article will deeply explore this problem and provide detailed solutions.

Problem Background

When developers create console applications using .NET Core 1.0, the build process by default only generates DLL files rather than traditional EXE executable files. This is because .NET Core adopts a cross-platform architecture design, where core logic is compiled into DLLs, and execution relies on the dotnet command-line tool.

In debugging environments, developers can run applications using the dotnet ConsoleApp2.dll command, but in production environments, users often expect to obtain a standalone EXE file that can be run by double-clicking.

Solution: Self-Contained Applications

To generate EXE files, you need to create self-contained applications. This deployment method packages application code, dependencies, and the .NET Core runtime together, forming a complete package that can run independently on target machines.

Runtime Identifier Configuration

In .NET Core 1.0, you first need to specify target runtime identifiers in the project file. Runtime identifiers define which operating system and architecture the application will run on.

<PropertyGroup>
    <RuntimeIdentifiers>win10-x64;ubuntu.16.10-x64</RuntimeIdentifiers>
</PropertyGroup>

This configuration allows the project to build for Windows 10 64-bit and Ubuntu 16.10 64-bit platforms. It's important to note that starting from .NET Core 2.0, this step is no longer required, as newer versions provide a more simplified publishing process.

Publishing Commands

After configuration, use the dotnet publish command to generate self-contained applications:

dotnet publish -c Release -r win10-x64
dotnet publish -c Release -r ubuntu.16.10-x64

These commands will:

Deployment Modes Explained

In .NET Core, there are two main deployment modes:

Framework-Dependent Deployment

This mode generates smaller EXE files but requires the target machine to have the corresponding version of .NET Core runtime installed. When the application starts, it uses the shared runtime installed on the system.

Self-Contained Deployment

Self-contained deployment generates larger EXE files because they include the complete .NET Core runtime. The advantage of this approach is that the application can run on any machine without pre-installing .NET Core.

Advanced Configuration Options

In newer versions of .NET Core, the publish command provides more configuration options:

dotnet publish --output "c:/temp/myapp" --runtime win-x64 --configuration Release
  -p:PublishSingleFile=true -p:PublishTrimmed=true --self-contained true

These options include:

Important Considerations

When using these features, pay attention to the following points:

When enabling the PublishTrimmed option, if the application uses reflection mechanisms, problems may occur because the trimming process might remove assemblies called by reflection.

The file size of self-contained applications will significantly increase because they need to include the entire .NET Core runtime. Developers need to balance between file size and deployment convenience based on specific requirements.

Operations in Visual Studio

In addition to command-line methods, developers can also complete publishing operations through the graphical interface in Visual Studio:

  1. Right-click the project and select "Publish"
  2. Choose folder target
  3. Configure target runtime and publishing options
  4. Complete the publishing process

Conclusion

Generating EXE files for .NET Core console applications requires implementing through self-contained applications. From early runtime identifier configurations to modern simplified publishing processes, .NET Core continues to improve in this aspect. Developers should choose appropriate deployment modes based on target environment requirements and pay attention to how various configuration options affect application behavior.

With the continuous development of .NET Core, the publishing and deployment processes have become simpler and more flexible, providing developers with better development experiences and more powerful deployment options.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.