
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-configurationAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 350 |
|---|---|
| repo stars | ★ 1.1k |
| Last updated | July 3, 2026 |
| Repository | aaronontheweb/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
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>orConfigurationonly.
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 appThe 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")setsConnectionStrings__Postgresexplicitly.- Every external dependency is represented via explicit config keys.
- The API project only reads
Configurationvalues.
---
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.mdskills/aspire/integration-testing/SKILL.mdskills/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.