Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
aaronontheweb avatar

Aspire Configuration

  • 350 installs
  • 1.1k repo stars
  • Updated July 3, 2026
  • aaronontheweb/dotnet-skills

aspire-configuration is a .NET Aspire skill that configures AppHost resources to emit explicit app configuration via environment variables while keeping application code free of Aspire clients and service-discovery packa

About

aspire-configuration is an agent skill from aaronontheweb/dotnet-skills for wiring .NET Aspire AppHost projects to application configuration. It teaches developers to let AppHost own Aspire Hosting packages and emit connection strings, feature toggles, and service endpoints as environment variables that app code reads through standard IConfiguration—without pulling Aspire client or service-discovery NuGet packages into application assemblies. Teams reach for aspire-configuration when Aspire-based repos need portable, transparent production settings for local dev, containers, and cloud targets. Core principles include infrastructure-in-AppHost, configuration-via-env-vars, and dev/test feature toggles that do not fork application code paths.

  • Structures AppHost and service config
  • Manages environment-specific overrides
  • Integrates secrets and connection strings
  • Aligns local and deployed profiles

Aspire Configuration by the numbers

  • 350 all-time installs (skills.sh)
  • Ranked #54 of 153 .NET & C# skills by installs in the Skillselion catalog
  • Data as of Aug 3, 2026 (Skillselion catalog sync)
npx skills add https://github.com/aaronontheweb/dotnet-skills --skill aspire-configuration

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs350
repo stars1.1k
Last updatedJuly 3, 2026
Repositoryaaronontheweb/dotnet-skills

How do you configure .NET Aspire without client packages?

Configure .NET Aspire app hosts, services, and environment-specific settings for local dev, containers, and cloud deployment targets.

Who is it for?

.NET developers using Aspire who want transparent, portable configuration and clean separation between AppHost infrastructure and application assemblies.

Skip if: Teams not using .NET Aspire or projects that intentionally embed Aspire service-discovery clients inside application code.

When should I use this skill?

A developer is wiring Aspire AppHost resources, environment-specific settings, or removing Aspire client packages from application code.

What you get

AppHost resource wiring, environment-variable configuration manifests, and portable app settings decoupled from Aspire SDK clients.

  • apphost resource wiring
  • environment configuration manifest

Files

SKILL.mdMarkdownGitHub ↗

Aspire Configuration

When to Use This Skill

Use this skill when:

  • Wiring AppHost resources to application configuration in Aspire-based repos
  • Ensuring production configuration is transparent and portable outside of Aspire
  • Avoiding Aspire client/service-discovery packages inside application code
  • Designing feature toggles for dev/test without changing app code paths

---

Core Principles

1. AppHost owns Aspire infrastructure packages

  • Aspire Hosting packages belong in AppHost only.
  • App projects should not reference Aspire client/service-discovery packages.

2. Explicit configuration only

  • AppHost must translate resource outputs into explicit config keys (env vars).
  • App code binds to IOptions<T> or Configuration only.

3. Production parity and transparency

  • Every value injected by AppHost must be representable in production as env vars

or config files without Aspire.

  • Avoid opaque service discovery and implicit configuration.

---

Configuration Flow

AppHost resource -> WithEnvironment(...) -> app config keys -> IOptions<T> in app

The AppHost is responsible for turning Aspire resources into explicit app settings. The application never consumes Aspire clients or service discovery directly.

---

AppHost Patterns (Explicit Mapping)

Example: Database + Blob Storage

// AppHost/Program.cs
var builder = DistributedApplication.CreateBuilder(args);

var postgres = builder.AddPostgres("postgres");
var db = postgres.AddDatabase("appdb");

var minio = builder.AddContainer("minio", "minio/minio")
    .WithArgs("server", "/data")
    .WithHttpEndpoint(targetPort: 9000, name: "http")
    .WithHttpEndpoint(targetPort: 9001, name: "console")
    .WithEnvironment("MINIO_ROOT_USER", "minioadmin")
    .WithEnvironment("MINIO_ROOT_PASSWORD", "minioadmin");

var api = builder.AddProject<Projects.MyApp_Api>("api")
    .WithReference(db, "Postgres")
    .WithEnvironment("BlobStorage__Enabled", "true")
    .WithEnvironment("BlobStorage__ServiceUrl", minio.GetEndpoint("http"))
    .WithEnvironment("BlobStorage__AccessKey", "minioadmin")
    .WithEnvironment("BlobStorage__SecretKey", "minioadmin")
    .WithEnvironment("BlobStorage__Bucket", "attachments")
    .WithEnvironment("BlobStorage__ForcePathStyle", "true");

builder.Build().Run();

Key points

  • WithReference(db, "Postgres") sets ConnectionStrings__Postgres explicitly.
  • Every external dependency is represented via explicit config keys.
  • The API project only reads Configuration values.

---

App Code Pattern (No Aspire Clients)

Application code binds to options and initializes SDKs directly. It never depends on Aspire client packages or service discovery.

// Api/Program.cs
builder.Services
    .AddOptions<BlobStorageOptions>()
    .BindConfiguration("BlobStorage")
    .ValidateDataAnnotations()
    .ValidateOnStart();

builder.Services.AddSingleton<IBlobStorageService>(sp =>
{
    var options = sp.GetRequiredService<IOptions<BlobStorageOptions>>().Value;
    return new S3BlobStorageService(options); // uses explicit options only
});

Do not add Aspire client packages (or AddServiceDiscovery) to the app. Those are orchestration concerns and should stay in AppHost.

---

Feature Toggles and Test Overrides

Keep toggles in config and drive them through AppHost and test fixtures. This maintains parity between dev/test and production configuration.

// AppHost: disable persistence in tests via config overrides
var config = builder.Configuration.GetSection("App")
    .Get<AppHostConfiguration>() ?? new AppHostConfiguration();

if (!config.UseVolumes)
{
    postgres.WithDataVolume(false);
}

api.WithEnvironment("BlobStorage__Enabled", config.EnableBlobStorage.ToString());

See skills/aspire/integration-testing/SKILL.md for patterns on passing configuration overrides into DistributedApplicationTestingBuilder.

---

Do / Don’t Checklist

Do

  • Map every Aspire resource output to explicit configuration keys
  • Use IOptions<T> with validation for all infrastructure settings
  • Keep AppHost as the only place that references Aspire hosting packages
  • Ensure any AppHost-injected value can be set in production env vars

Don’t

  • Reference Aspire client/service-discovery packages in application projects
  • Rely on opaque service discovery that cannot be mirrored in production
  • Hide configuration behind Aspire-only abstractions

---

Related Skills

  • skills/aspire/service-defaults/SKILL.md
  • skills/aspire/integration-testing/SKILL.md
  • skills/akka/aspire-configuration/SKILL.md

---

Resources

  • Aspire AppHost environment configuration: https://learn.microsoft.com/en-us/dotnet/aspire/fundamentals/app-host
  • Configuration in .NET: https://learn.microsoft.com/en-us/dotnet/core/extensions/configuration

Related skills

How it compares

Use aspire-configuration for AppHost-owned env-var wiring; use generic .NET configuration skills when Aspire orchestration is not in the stack.

FAQ

What is the core principle of aspire-configuration?

aspire-configuration keeps Aspire Hosting packages in AppHost and emits explicit configuration via environment variables. Application code reads IConfiguration without referencing Aspire client or service-discovery NuGet packages.

When should developers use aspire-configuration?

Developers should use aspire-configuration when wiring AppHost resources to .NET apps in Aspire-based repos. It applies to local dev, container, and cloud targets that need portable, transparent settings.

.NET & C#backenddevops

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.