Home of .NET's Virtual Monolithic Repository which includes all the code needed to build the .NET SDK from source
MIT License
This repository is a Virtual Monolithic Repository (VMR) which includes all the source code and infrastructure needed to build the .NET SDK.
What this means:
In the VMR, you can find:
src/
,Just like the development repositories, the VMR will have a release branch for every feature band (e.g. release/8.0.1xx
).
Similarly, VMR's main
branch will follow main
branches of product repositories (see Synchronization Based on Declared Dependencies).
More in-depth documentation about the VMR can be found in VMR Design And Operation. See also dotnet/source-build for more information about our whole-product source-build.
We will achieve these goals while keeping active coding work in the separate repos where it happens today. For example: ASP.NET features will continue to be developed in dotnet/aspnetcore
and CLR features will be continue to be developed in dotnet/runtime
. Each of these repos have their own distinct communities and processes, and aggregating development into a true mono-repo would work against that. Hence, the "virtual" monolithic repo: the VMR gives us the simplicity of a mono-repo for building and servicing the product, while active development of components of that product stays in its various existing repos. The day to day experience for typical contributors will not change.
This is a work-in-progress. There are considerable limitations to what is possible at the moment. For an extensive list of current limitations, please see Temporary Mechanics. See the Unified Build roadmap for more details.
For the latest information about Source-Build support for new .NET versions, please check our GitHub Discussions page for announcements.
For the time being, the source code only flows one way - from the development repos into the VMR. More details on this process:
We expect the code flow to start working both ways at the completion of the Unified Build project. See the Unified Build roadmap for more details.
At this time, the VMR will not accept any changes and is a read-only mirror of the development repositories only. Please, make the changes in the respective development repositories (e.g., dotnet/runtime or dotnet/sdk) and they will get synchronized into the VMR automatically.
Please note that this repository is a work-in-progress and there are some usability issues connected to this. These can be nuisances such as some checked-in files getting modified by the build itself and similar. For the latest information about Source-Build support, please watch for announcements posted on our GitHub Discussions page.
The dependencies for building can be found here. In case you don't want to / cannot prepare your environment per the requirements, consider using Docker.
Clone the repository
git clone https://github.com/dotnet/dotnet dotnet-dotnet
cd dotnet-dotnet
Build the .NET SDK
Choose one of the following build modes:
Microsoft based build
For Unix:
./build.sh --clean-while-building
For Windows:
.\build.cmd -cleanWhileBuilding
Building from source
# Prep the source to build on your distro.
# This downloads a .NET SDK and a number of .NET packages needed to build .NET from source.
./prep-source-build.sh
# Build the .NET SDK
./build.sh -sb --clean-while-building
The resulting SDK is placed at artifacts/assets/Release/dotnet-sdk-9.0.100-[your-RID].tar.gz
(for Unix) or artifacts/assets/Release/dotnet-sdk-9.0.100-[your-RID].zip
(for Windows).
(Optional) Unpack and install the .NET SDK
For Unix:
mkdir -p $HOME/dotnet
tar zxf artifacts/assets/Release/dotnet-sdk-9.0.100-[your-RID].tar.gz -C $HOME/dotnet
ln -s $HOME/dotnet/dotnet /usr/bin/dotnet
For Windows:
mkdir %userprofile%\dotnet
tar -xf artifacts/assets/Release/dotnet-sdk-9.0.100-[your RID].zip -C %userprofile%\dotnet
set "PATH=%userprofile%\dotnet;%PATH%"
To test your built SDK, run the following:
dotnet --info
[!NOTE] Run
./build.sh --help
(for Unix) or.\build.cmd -help
(for Windows) to see more information about supported build options.
You can also build the repository using a Docker image which has the required prerequisites inside.
The example below creates a Docker volume named vmr
and clones and builds the VMR there.
docker run --rm -it -v vmr:/vmr -w /vmr mcr.microsoft.com/dotnet-buildtools/prereqs:centos-stream9
git clone https://github.com/dotnet/dotnet .
# - Microsoft based build
./build.sh --clean-while-building
# - Building from source
./prep-source-build.sh && ./build.sh -sb --clean-while-building
mkdir -p $HOME/.dotnet
tar -zxf artifacts/assets/Release/dotnet-sdk-9.0.100-centos.9-x64.tar.gz -C $HOME/.dotnet
ln -s $HOME/.dotnet/dotnet /usr/bin/dotnet
You can also utilize GitHub Codespaces where you can find preset containers in this repository.
You can also build from sources (and not from a context of a git repository), such as the ones you can acquire from a dotnet/dotnet release.
In this case, you need to provide additional information which includes the original repository and commit hash the code was built from so that the SDK can provide a better debugging experience (think the Step into..
functionality).
Usually, this means the dotnet/dotnet repository together with the commit the release tag is connected to.
In practice, this means that when calling the main build script, you need to provide additional arguments when building outside of a context of a git repository.
Alternatively, you can also provide a manifest file where this information can be read from. This file (release.json
) can be found attached with the dotnet/dotnet release.
Sometimes you want to make a change in a repository and test that change in the VMR. You could of course make the change in the VMR directly (locally, as the VMR is read-only for now) but in case it's already available in your repository, you can synchronize it into the VMR (again locally).
To do this, you can either start a dotnet/dotnet Codespace - you will see instructions right after it starts. Alternatively, you can clone the repository locally and use the vmr-sync.sh or vmr-sync.ps1 script to pull your changes in. Please refer to the documentation in the script for more details.
The full list of components synchronized into the VMR is here (Components.md).
The repository also contains a JSON manifest listing all components in a machine-readable format.
This repo does not accept issues as of now. Please file issues to the appropriate development repos. For issues with the VMR itself, please use the source-build repository.
.NET Runtime is a .NET Foundation project.
.NET is licensed under the MIT license.