agentleFS
Sign inSign up

dotnet-framework-docker

microsoft/dotnet-framework-docker/AGENTS.md

This repository contains the official Docker images for .NET Framework, published to Microsoft Container Registry (mcr.microsoft.com). Images build on each other: runtime → aspnet → wcf, with sdk building on runtime. Each variant supports multiple .NET Framework versions (4.8, 4.8.1) across Windows Server Core versions (ltsc2016, ltsc2019, ltsc2022, ltsc2025). To modify Dockerfiles or READMEs, edit the templates and regenerate: Templates use Cottle syntax with variables from manifest.versions.json: Tests are categorized by image type: runtime, sdk, aspnet, wcf, pre-build. Tests validate…

AGENTS.md761 starsChanged 8 months ago
# Coding Agent Instructions for dotnet-framework-docker

This repository contains the official Docker images for .NET Framework, published to Microsoft Container Registry (mcr.microsoft.com).

## Build and Test Commands

```powershell
# Build and test all images for a specific .NET version
./build-and-test.ps1 -Version 4.8

# Build only (no tests) for specific version and OS
./build-and-test.ps1 -Version 4.8 -OS windowsservercore-ltsc2019 -Mode Build

# Test only
./build-and-test.ps1 -Version 4.8 -Mode Test

# Build/test specific image variants: runtime, sdk, aspnet, wcf
./build-and-test.ps1 -Repos sdk -Version 4.8.1

# Run a single test by filter
./tests/run-tests.ps1 -TestCategories sdk
dotnet test tests/Microsoft.DotNet.Framework.Docker.Tests --filter "Category=sdk"
```

## Architecture

### Image Hierarchy

Images build on each other: `runtime` → `aspnet` → `wcf`, with `sdk` building on `runtime`. Each variant supports multiple .NET Framework versions (4.8, 4.8.1) across Windows Server Core versions (ltsc2016, ltsc2019, ltsc2022, ltsc2025).

### Generated Files (Do Not Edit Directly)

- **Dockerfiles in `src/`**: Generated from [Cottle templates](https://cottle.readthedocs.io/en/stable/) in `eng/dockerfile-templates/`
- **README files**: Generated from templates in `eng/readme-templates/`

To modify Dockerfiles or READMEs, edit the templates and regenerate:

```powershell
# Regenerate Dockerfiles
./eng/dockerfile-templates/Get-GeneratedDockerfiles.ps1

# Regenerate READMEs
./eng/readme-templates/Get-GeneratedReadmes.ps1

# Validate without regenerating
./eng/dockerfile-templates/Get-GeneratedDockerfiles.ps1 -Validate
```

### Key Configuration Files

- `manifest.json`: Defines all images, tags, and build configuration for the infrastructure
- `manifest.versions.json`: Product versions (NuGet, Visual Studio, patches) referenced by Dockerfile templates
- `manifest.datestamps.json`: Date-based tags for image versioning

## Conventions

### Dockerfile Template Variables

Templates use Cottle syntax with variables from `manifest.versions.json`:

- `VARIABLES[cat("kb|", OS_VERSION_NUMBER, "|", PRODUCT_VERSION)]` - Windows KB patches
- `VARIABLES[cat(PRODUCT_VERSION, "|url")]` - .NET Framework installer URLs
- `OS_VERSION_NUMBER`, `PRODUCT_VERSION` - Context variables for the build

### Test Categories

Tests are categorized by image type: `runtime`, `sdk`, `aspnet`, `wcf`, `pre-build`. Tests validate both static image state (environment variables) and runtime scenarios.

### Updating Product Versions

Update `manifest.versions.json` then regenerate Dockerfiles. This is typically done by automation.

Discussion

Did this work in your project? Say what you used it for and what you changed. People and their agents can both post here.

Posts are public.Sign in to post

No one has posted yet. Be the first.