CodeDancing with Milos
Back
7 min read

The Complete Guide to Setting Up a Production-Ready .NET 10 Development Environment in 2026

Set up a team-friendly .NET 10 development environment that mirrors CI/CD pipelines. This guide covers Windows (with WSL), macOS, and Linux setups using VS Code or Visual Studio 2026, with exact commands, version pinning via global.json, and team standardization through .editorconfig and analyzers. Skip the setup drift, get everyone on the same page from day one.

Post

Why This Setup Matters

Before diving into installation steps, let's understand why a standardized development environment is critical for professional teams:

Stability: Pinning SDK versions prevents the "it works on my machine" syndrome. When everyone uses the same .NET SDK version, builds are predictable and debugging becomes straightforward.

Reproducibility: A new team member should be able to clone your repository and have a working environment within minutes. No tribal knowledge required.

CI Parity: Your local environment should mirror your CI/CD pipeline as closely as possible. If it builds locally, it should build in GitHub Actions, Azure DevOps, or whatever pipeline you're using.

Cross-Platform Confidence: .NET 10 runs on Windows, macOS, and Linux. Testing on your target deployment platform (especially if it's Linux) catches filesystem case-sensitivity issues, path separator problems, and permission behaviors early.


Prerequisites and Hardware Recommendations

Minimum Requirements

ComponentWindowsmacOSLinux
OS VersionWindows 10 v1607+ / Windows 11macOS 14 (Sonoma) or 15 (Sequoia)Ubuntu 22.04+, Fedora 42+, RHEL 9+
RAM8GB (16GB recommended)8GB (16GB recommended)8GB (16GB recommended)
Storage20GB free SSD space20GB free SSD space20GB free SSD space
Architecturex64 or ARM64Intel or Apple Silicon (M1+)x64 or ARM64
← Scroll horizontally to view more →

Windows Setup

Visual Studio remains the most feature-complete IDE for .NET development on Windows. The Community Edition is free for individuals, students, and open-source contributors.

Choose Your Installation Method
1

Manual DownloadRecommended

Download the installer directly from Microsoft and follow the guided setup wizard.

2

Command-Line Install

Install directly via Windows Package Manager (winget) - faster and scriptable.

winget install -e --id Microsoft.VisualStudio.Community

First Launch Configuration:

  1. Sign in with your Microsoft account (or create one here)
  2. For Development Settings, choose Visual C#
  3. Pick a color theme (Light recommended for accessibility)

Install VS Code

VS Code is lightweight, cross-platform, and increasingly popular among .NET developers.

Choose Your Installation Method
1

Manual DownloadRecommended

Download the installer directly from Microsoft and follow the guided setup wizard.

2

Command-Line Install

Install directly via Windows Package Manager (winget) - faster and scriptable.

winget install -e --id Microsoft.VisualStudioCode

Install the .NET 10 SDK

Choose Your Installation Method
1

Manual DownloadRecommended

Download the .NET 10 SDK installer directly from Microsoft's official site.

2

Command-Line Install

Install directly via Windows Package Manager (winget) - faster and scriptable.

winget install -e --id Microsoft.DotNet.SDK.Preview

Verify installation:

dotnet --list-sdks

Expected output:

10.0.100 [C:\Program Files\dotnet\sdk]

Install Essential VS Code Extensions

Install these extensions for a productive C# development experience:

# Core C# development
code --install-extension ms-dotnettools.csdevkit
 
# Individual extensions (installed automatically with C# Dev Kit, but listed for reference)
code --install-extension ms-dotnettools.csharp
code --install-extension ms-dotnettools.vscodeintellicode-csharp
 
# Useful additions
code --install-extension tintoy.msbuild-project-tools
code --install-extension yzhang.markdown-all-in-one
code --install-extension humao.rest-client
ExtensionPurpose
C# Dev Kit (ms-dotnettools.csdevkit)Solution explorer, test discovery, project management
C# (ms-dotnettools.csharp)Language support, IntelliSense, debugging via Roslyn
IntelliCode for C#AI-assisted code completion
MSBuild project toolsIntelliSense for .csproj files
REST ClientTest HTTP APIs directly in VS Code
← Scroll horizontally to view more →

Set Up WSL for Cross-Platform Development

If you're deploying to Linux servers (and most production .NET apps do), WSL (Windows Subsystem for Linux) is invaluable. It lets you run a genuine Linux kernel inside Windows.

# Install WSL with Ubuntu (run as Administrator)
wsl --install
 
# Restart your computer when prompted, then:
wsl --set-default-version 2

After restart, Ubuntu will launch automatically. Create your Linux username and password.

# Inside WSL, install .NET SDK
wget https://packages.microsoft.com/config/ubuntu/24.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
 
sudo apt-get update
sudo apt-get install -y dotnet-sdk-10.0
 
# Verify
dotnet --version

Common Windows Pitfalls

ProblemCauseFix
dotnet not recognizedPATH not updatedRestart terminal or run installer again
SDK installed but wrong version usedMultiple SDKs, no global.jsonAdd global.json to repo root
VS Code C# extension not loadingExtension conflictDisable OmniSharp if C# Dev Kit installed
WSL file operations slowAccessing Windows files from WSLWork in /home/user/ not /mnt/c/
← Scroll horizontally to view more →

macOS Setup

Install Xcode Command Line Tools

Required for various development tools:

xcode-select --install

Install VS Code

Choose Your Installation Method
1

HomebrewRecommended

Install via Homebrew package manager - simple and keeps VS Code up to date.

brew install --cask visual-studio-code
2

Manual Download

Download the installer directly if you prefer not to use Homebrew.

Install the .NET 10 SDK

Choose Your Installation Method
1

HomebrewRecommended

Install via Homebrew package manager - handles dependencies automatically.

brew install dotnet@10
2

Manual Download

Download the official installer from Microsoft.

Verify installation:

dotnet --list-sdks

For Apple Silicon Macs (M1/M2/M3/M4), .NET 10 runs natively on ARM64—no Rosetta required.

Install VS Code Extensions

code --install-extension ms-dotnettools.csdevkit
code --install-extension ms-dotnettools.csharp
code --install-extension tintoy.msbuild-project-tools
code --install-extension humao.rest-client

Install JetBrains Rider (Alternative IDE)

Rider is a powerful cross-platform .NET IDE, free for non-commercial use since October 2024.

brew install --cask rider

Rider is popular among experienced .NET developers and offers excellent refactoring tools, though it occasionally shows false-positive errors in Razor files.

Common macOS Pitfalls

ProblemCauseFix
dotnet not found after installShell PATH not updatedAdd to ~/.zshrc: export PATH="$PATH:/usr/local/share/dotnet"
Certificate errors on HTTPSDev certs not trustedRun dotnet dev-certs https --trust
Apple Silicon performance issuesRunning x64 binaries via RosettaEnsure you downloaded ARM64 SDK
Visual Studio for Mac?Reached end-of-life August 2024Use VS Code, Rider, or VS in a VM
← Scroll horizontally to view more →

Linux Setup

Install .NET 10 SDK

Ubuntu/Debian:

# Add Microsoft package repository
wget https://packages.microsoft.com/config/ubuntu/24.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
 
# Install SDK
sudo apt-get update
sudo apt-get install -y dotnet-sdk-10.0
 
# Verify
dotnet --list-sdks

Fedora:

sudo dnf install dotnet-sdk-10.0

RHEL/CentOS Stream:

sudo dnf install dotnet-sdk-10.0

Install VS Code

# Ubuntu/Debian
sudo apt-get install wget gpg
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg
sudo install -D -o root -g root -m 644 packages.microsoft.gpg /etc/apt/keyrings/packages.microsoft.gpg
sudo sh -c 'echo "deb [arch=amd64,arm64,armhf signed-by=/etc/apt/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main" > /etc/apt/sources.list.d/vscode.list'
sudo apt update
sudo apt install code
 
# Fedora
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'
sudo dnf install code

Install VS Code Extensions

code --install-extension ms-dotnettools.csdevkit
code --install-extension ms-dotnettools.csharp
code --install-extension tintoy.msbuild-project-tools

Common Linux Pitfalls

ProblemCauseFix
Permission denied on restoreNuGet cache permissionssudo chown -R $USER ~/.nuget
ICU package missingGlobalization supportsudo apt install libicu-dev
OpenSSL version mismatchOlder distroInstall libssl3 or use --runtime linux-musl-x64
Case-sensitivity bugsWindows habitsConsistent file naming conventions
← Scroll horizontally to view more →

Verification - Confirm Your Environment Works

Run these commands on any OS to verify your setup:

# Check SDK version
dotnet --version
# Expected: 10.0.100 (or similar)
 
# Check all installed SDKs
dotnet --list-sdks
 
# Check installed runtimes
dotnet --list-runtimes
 
# Create and run a test project
mkdir ~/dotnet-test && cd ~/dotnet-test
dotnet new console -n HelloWorld
cd HelloWorld
dotnet run
# Expected output: Hello, World!
 
# Run a web project test
cd ~/dotnet-test
dotnet new webapi -n TestApi
cd TestApi
dotnet run
# Visit https://localhost:5001/weatherforecast in browser

VS Code Verification

  1. Open VS Code in the HelloWorld folder: code .
  2. Wait for C# Dev Kit to activate (see status bar)
  3. Open Program.cs
  4. Verify IntelliSense works: type Console. and see method suggestions
  5. Set a breakpoint on line 1, press F5 to debug
  6. Confirm breakpoint hits and variables are inspectable

Visual Studio Verification (Windows)

  1. Open Visual Studio 2026
  2. Create new project → Console App → .NET 10
  3. Press F5 to build and run
  4. Verify output appears in console window

Team Standardization

These configurations ensure every team member has an identical development experience.

Pin SDK Version with

global.json

Create this file in your repository root:

{
  "sdk": {
    "version": "10.0.100",
    "rollForward": "latestPatch",
    "allowPrerelease": false
  }
}

Options for rollForward:

  • disable - Exact version only
  • latestPatch - Allow 10.0.101, 10.0.102, etc.
  • latestFeature - Allow 10.1.x
  • latestMajor - Allow any newer SDK

Recommendation: Use latestPatch for stability with security updates.

Code Style with

.editorconfig

Create .editorconfig in your repository root:

# Top-most EditorConfig file
root = true
 
# All files
[*]
indent_style = space
indent_size = 4
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
 
# C# files
[*.cs]
# Organize usings
dotnet_sort_system_directives_first = true
dotnet_separate_import_directive_groups = false
 
# Use 'var' when type is apparent
csharp_style_var_for_built_in_types = false:suggestion
csharp_style_var_when_type_is_apparent = true:suggestion
csharp_style_var_elsewhere = false:suggestion
 
# Prefer expression-bodied members
csharp_style_expression_bodied_methods = when_on_single_line:suggestion
csharp_style_expression_bodied_properties = true:suggestion
 
# Naming conventions
dotnet_naming_rule.private_fields_should_be_camel_case.severity = suggestion
dotnet_naming_rule.private_fields_should_be_camel_case.symbols = private_fields
dotnet_naming_rule.private_fields_should_be_camel_case.style = camel_case_underscore
 
dotnet_naming_symbols.private_fields.applicable_kinds = field
dotnet_naming_symbols.private_fields.applicable_accessibilities = private
 
dotnet_naming_style.camel_case_underscore.required_prefix = _
dotnet_naming_style.camel_case_underscore.capitalization = camel_case
 
# New lines
csharp_new_line_before_open_brace = all
csharp_new_line_before_else = true
csharp_new_line_before_catch = true
csharp_new_line_before_finally = true
 
# JSON files
[*.json]
indent_size = 2
 
# YAML files
[*.{yml,yaml}]
indent_size = 2
 
# Markdown files
[*.md]
trim_trailing_whitespace = false
 
# Project files
[*.{csproj,props,targets}]
indent_size = 2

Code Analyzers

Add analyzers to your .csproj for consistent code quality:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net10.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
    <AnalysisLevel>latest-all</AnalysisLevel>
    <EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
  </PropertyGroup>
 
  <ItemGroup>
    <!-- Additional analyzers -->
    <PackageReference Include="StyleCop.Analyzers" Version="1.2.0-beta.556">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
    <PackageReference Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="9.0.0">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
  </ItemGroup>
</Project>

Tool Manifest for CLI Tools

Create a tool manifest for team-shared CLI tools:

# Initialize tool manifest (creates .config/dotnet-tools.json)
dotnet new tool-manifest
 
# Install common tools
dotnet tool install dotnet-ef
dotnet tool install dotnet-outdated-tool
dotnet tool install dotnet-format

This creates .config/dotnet-tools.json:

{
  "version": 1,
  "isRoot": true,
  "tools": {
    "dotnet-ef": {
      "version": "10.0.0",
      "commands": ["dotnet-ef"]
    },
    "dotnet-outdated-tool": {
      "version": "4.6.0",
      "commands": ["dotnet-outdated"]
    },
    "dotnet-format": {
      "version": "9.0.0",
      "commands": ["dotnet-format"]
    }
  }
}

New team members restore tools with:

dotnet tool restore

Git Hooks for Quality Gates

Use a .githooks folder with a pre-commit hook:

#!/bin/sh
# .githooks/pre-commit
 
echo "Running pre-commit checks..."
 
# Format check
dotnet format --verify-no-changes
if [ $? -ne 0 ]; then
    echo "❌ Code formatting issues found. Run 'dotnet format' to fix."
    exit 1
fi
 
# Build check
dotnet build --no-restore
if [ $? -ne 0 ]; then
    echo "❌ Build failed."
    exit 1
fi
 
# Test check
dotnet test --no-build --verbosity quiet
if [ $? -ne 0 ]; then
    echo "❌ Tests failed."
    exit 1
fi
 
echo "✅ All pre-commit checks passed."

Configure Git to use custom hooks folder:

git config core.hooksPath .githooks

VS Code Workspace Settings

Create .vscode/settings.json for consistent editor behavior:

{
  "editor.formatOnSave": true,
  "editor.defaultFormatter": "ms-dotnettools.csharp",
  "files.exclude": {
    "**/bin": true,
    "**/obj": true
  },
  "omnisharp.enableRoslynAnalyzers": true,
  "omnisharp.enableEditorConfigSupport": true,
  "dotnet.defaultSolution": "YourSolution.sln"
}

Quick Start Summary

New Machine Setup (5 Minutes)

Windows:

winget install Microsoft.VisualStudioCode
winget install Microsoft.DotNet.SDK.10
code --install-extension ms-dotnettools.csdevkit

macOS:

brew install --cask visual-studio-code
brew install dotnet@10
code --install-extension ms-dotnettools.csdevkit
dotnet dev-certs https --trust

Linux (Ubuntu):

wget https://packages.microsoft.com/config/ubuntu/24.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb && rm packages-microsoft-prod.deb
sudo apt-get update && sudo apt-get install -y dotnet-sdk-10.0 code
code --install-extension ms-dotnettools.csdevkit

Cloning an Existing Project

git clone https://github.com/your-org/your-project.git
cd your-project
dotnet tool restore
dotnet restore
dotnet build
dotnet test

Troubleshooting FAQ

Q: "The SDK 'Microsoft.NET.Sdk' specified could not be found"

Cause: .NET SDK not installed or PATH not configured.

Fix:

# Verify SDK is installed
dotnet --list-sdks
 
# If empty, reinstall SDK
# If populated, restart your terminal/IDE

Q: "error CS0234: The type or namespace name 'X' does not exist"

Cause: Missing NuGet package or framework reference.

Fix:

dotnet restore
# If still failing, clear NuGet cache:
dotnet nuget locals all --clear
dotnet restore

Q: "The current .NET SDK does not support targeting .NET 10.0"

Cause: global.json specifies an SDK version you don't have.

Fix:

# Check required version
cat global.json
 
# Install that specific version, or update global.json

Q: VS Code IntelliSense not working

Cause: Extension conflict or OmniSharp vs C# Dev Kit conflict.

Fix:

  1. Open VS Code settings
  2. Disable omnisharp.useModernNet if using C# Dev Kit
  3. Reload VS Code window (Ctrl+Shift+P → "Reload Window")

Q: "Unable to find package" during restore

Cause: Missing NuGet source or corporate proxy.

Fix:

# Check configured sources
dotnet nuget list source
 
# Add official source if missing
dotnet nuget add source https://api.nuget.org/v3/index.json -n nuget.org

Q: Certificate errors on localhost HTTPS

Cause: Development certificates not trusted.

Fix:

dotnet dev-certs https --clean
dotnet dev-certs https --trust

Q: WSL is extremely slow

Cause: Accessing Windows filesystem (/mnt/c/) from WSL.

Fix: Always work in Linux filesystem (/home/user/projects/). Clone repos directly in WSL, not on Windows drives.

Q: Rider shows false "Cannot resolve symbol" errors

Cause: Known Rider bug with Razor components and Unity plugin interference.

Fix: Build the project—if it compiles successfully, ignore the IDE errors. Check for Rider updates.


Final Checklist

Copy this checklist for new team members:

## .NET Development Environment Setup Checklist
 
### Installation
- [ ] .NET 10 SDK installed (`dotnet --version` returns 10.x.x)
- [ ] VS Code or Visual Studio 2026 installed
- [ ] C# Dev Kit extension installed (VS Code)
- [ ] Git installed and configured
 
### Project Setup
- [ ] Repository cloned
- [ ] `dotnet tool restore` completed
- [ ] `dotnet restore` completed
- [ ] `dotnet build` succeeds
- [ ] `dotnet test` passes
 
### Verification
- [ ] IntelliSense working in IDE
- [ ] Debugging works (breakpoints hit)
- [ ] HTTPS dev certificates trusted
 
### Team Standards
- [ ] `.editorconfig` rules understood
- [ ] Git hooks configured (`git config core.hooksPath .githooks`)
- [ ] Code formatting matches team style
 
### Optional (Windows)
- [ ] WSL2 installed for Linux testing
- [ ] .NET SDK installed inside WSL

Conclusion

A well-configured development environment is an investment that pays dividends throughout a project's lifecycle. By standardizing on specific SDK versions, enforcing code style through .editorconfig, and using tool manifests for CLI utilities, you eliminate entire categories of "works on my machine" problems.

With this setup, your team can focus on building great software instead of debugging environment inconsistencies.


Last updated: January 2026 | .NET 10 SDK 10.0.1 | Visual Studio 2026 (18.1.1) | VS Code 1.104+