- .NET:
.NET 10 - AWS SDK:
AWSSDK.S3 - Console UI:
Terminal.Gui - Logging:
Microsoft.Extensions.Logging.Console - Testing: xUnit v3 (
xunit.v3.mtp-v2) on Microsoft Testing Platform - Package management: Central Package Management (
Directory.Packages.props)
- The console app prompts you for:
- bucket name
- optional prefix filter
- local download directory
- optional region
- overwrite behavior
- max concurrency
S3DownloaderService:- lists objects via
ListObjectsV2 - skips “directory marker” keys (keys ending in
/) - downloads each object via
GetObjectAsync - streams the response stream to a local file path
- limits parallel downloads using a semaphore (
MaxConcurrency) - reports per-object progress via callback so the console UI can render progress bars
- lists objects via
The console app creates the S3 client using this precedence order:
- Default AWS SDK behavior (no explicit profile)
appsettings.jsonvalueAWS:Profile- CLI argument
--profile <name>/--profile=<name>
If a profile name is specified (via config or CLI), credentials are resolved from the standard AWS shared config/credentials files (e.g. %UserProfile%\\.aws\\config on Windows).
File: src/SimpleAWS.S3.Downloader.Console/appsettings.json
Available settings:
AWS:Profile: Named AWS profile to use from the shared config/credentials files. When null, the SDK default chain is used.AWS:Region: AWS region override. When null, the region is taken from the selected profile.App:DefaultDownloadPath: Default local download folder shown in the UI. When null, the current working directory is used.Logging:LogLevel:Default,Logging:LogLevel:Microsoft,Logging:LogLevel:System: StandardMicrosoft.Extensions.Loggingfilter settings.
The app is primarily interactive. Supported args:
--profile <name>or--profile=<name>- Overrides
AWS:Profilefromappsettings.json. - Forces the app to use the named shared-config profile.
- Overrides
When using dotnet run, pass args after --:
dotnet run --project src\\SimpleAWS.S3.Downloader.Console -- --profile masterdotnet run --project src\\SimpleAWS.S3.Downloader.ConsoleThis repo uses xUnit v3 + Microsoft Testing Platform on .NET 10.
Run the test project (instead of dotnet test):
dotnet run --project src\\SimpleAWS.S3.Downloader.Core.Tests\\SimpleAWS.S3.Downloader.Core.Tests.csproj -c Release


{ "AWS": { "Profile": null, "Region": null }, "App": { "DefaultDownloadPath": null }, "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "System": "Warning" } } }