Skip to content

Publishing, Deployment, and Versioning ​

Building creates output for development. Publishing creates output intended to run somewhere else. .NET publishing options affect size, portability, startup time, runtime requirements, and compatibility.

Original Microsoft Learn reference: .NET application publishing overview.

A practical mental model ​

mermaid
flowchart LR
    A["Build output"] --> B["Publish choices"]
    B --> C["Framework-dependent or self-contained"]
    B --> D["Single-file or multi-file"]
    B --> E["Trimmed or untrimmed"]

Key ideas ​

  • Framework-dependent apps require a compatible .NET runtime on the target machine.
  • Self-contained apps include the runtime with the app.
  • Single-file publishing bundles output into one executable file.
  • Trimming can reduce size but may affect reflection-heavy code.
  • Versioning includes SDK versions, target frameworks, runtime versions, package versions, and assembly versions.

Build versus publish ​

This distinction matters in real delivery workflows.

  • dotnet build is mainly about compiling for development and verification
  • dotnet publish prepares application output for deployment or distribution

Publishing decisions should be driven by the target environment, not by what feels easiest on the developer machine.

Example ​

bash
dotnet publish -c Release
dotnet publish -c Release --self-contained true

Choose publishing settings based on the environment where the program will run, not only on local convenience.

Versioning is broader than one number ​

In .NET, versioning often spans several layers at once:

  • SDK version used to build
  • target framework of the project
  • runtime version expected or bundled
  • package versions in dependencies
  • assembly and product version metadata

That is why deployment issues are often compatibility issues rather than simple "it built successfully" questions.

Practical guidance ​

Ask these questions before publishing:

  • will the target environment already have the right runtime installed
  • is output size or portability the bigger priority
  • does the application use reflection-heavy features that trimming could affect
  • how will version consistency be controlled across development and deployment environments

Summary ​

  • publishing is a deployment-oriented step, not just another name for building
  • framework-dependent and self-contained deployments make different tradeoffs
  • single-file and trimming options can improve portability or size but may add constraints
  • versioning in .NET involves SDK, runtime, target framework, package, and assembly decisions together

Practice ​

Publish a small console app and compare the output of a normal framework-dependent publish with a self-contained publish.

As a second exercise, explain why a successful local build does not automatically guarantee a successful deployment environment.

Built with VitePress and published on GitHub Pages.