Skip to content

dotnet/source-build

main
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

.NET Source-Build

Please use GitHub discussions to see announcements, ask questions, make suggestions, and share information with other members of the source-build community.

This repo is the starting point for building .NET from source. It contains documentation, tools, and is used for issue tracking.

Prerequisites

The dependencies for building .NET from source can be found here. It may also be helpful to reference the Dockerfiles in dotnet-buildtools-prereqs-docker. We use these images to build and test source-build CI here.

Building .NET 8.0

.NET 8.0 (currently in prerelease) and newer will be built from the dotnet/dotnet repo. Clone the dotnet/dotnet repo and check out the tag for the desired release. Then, follow the instructions in dotnet/dotnet's README to build .NET from source.

Building .NET 7.0 and .NET 6.0

.NET 6.0 and 7.0 are built from source using the dotnet/installer repo. Clone the dotnet/installer repo and check out the tag for the desired release. Then, follow the instructions in dotnet/installer's README to build .NET from source. Please see the support section below to see which feature branches are currently supported.

The source-build repository doesn't currently support Windows. See source-build#1190.

Source-build goals

The key goal of source-build is to satisfy the official packaging rules of commonly used Linux distributions, such as Fedora and Debian. Many Linux distributions have similar rules. These rules tend to have two main principles: consistent reproducibility, and source code for everything.

A secondary goal of source-build is to allow .NET contributors to build a .NET SDK with coordinated changes in multiple repositories. However, the developer experience is significantly better in individual repositories and, if possible, contributors should make and test changes in the target repo, not source-build.

What does the source-build infrastructure do?

Source-build solves common challenges that most developers encounter when trying to build the whole .NET SDK from source.

  • .NET is composed of many repositories that need to be built at a specific combination of commits.
  • Each repository's build output needs to flow into the next repository's build.
  • By default, most .NET repositories download prebuilt binary dependencies from online sources. These are forbidden by typical Linux distribution rules, and interfere with build output flow.
  • Nearly all .NET repositories require the .NET SDK to build. This is a circular dependency, which presents a bootstrapping problem.

.NET in Linux Distributions

Distro Package Feed Maintainer
Alpine Community @ayakael
Arch Linux Community
Arch User Repo
@alucryd
CentOS Stream CentOS Stream Mirror @omajid
Fedora Default @omajid, @crummel
Homebrew Formula @asbjornu
Red Hat Enterprise Linux Default @omajid
Ubuntu Default
Personal Package Archives
@mirespace

Support

.NET Source-Build is supported on the oldest available .NET SDK feature update for each major release, and on Linux only. For example, if .NET 6.0.1xx, 6.0.2xx, 7.0.1xx, and 7.0.2xx feature updates are available from dotnet.microsoft.com, Source-Build will support 6.0.1xx and 7.0.1xx.

For the latest information about Source-Build support for new .NET versions, please check our GitHub Discussions page for announcements.

License

This repo is licensed under the MIT license.