NetEnvExtensions 1.0.5
dotnet add package NetEnvExtensions --version 1.0.5
NuGet\Install-Package NetEnvExtensions -Version 1.0.5
<PackageReference Include="NetEnvExtensions" Version="1.0.5" />
<PackageVersion Include="NetEnvExtensions" Version="1.0.5" />
<PackageReference Include="NetEnvExtensions" />
paket add NetEnvExtensions --version 1.0.5
#r "nuget: NetEnvExtensions, 1.0.5"
#:package NetEnvExtensions@1.0.5
#addin nuget:?package=NetEnvExtensions&version=1.0.5
#tool nuget:?package=NetEnvExtensions&version=1.0.5
NetEnvExtensions is an extension for .NET that automatically substitutes environment variable values into your application configuration (e.g., from appsettings.json or other sources) using the syntax ${VAR_NAME}
or ${VAR_NAME:default}
.
Features
- Supports environment variable substitution in any configuration value.
- Ability to specify default values:
${VAR_NAME:default}
. - Simple integration with Microsoft.Extensions.Configuration.
- Supports loading environment variables from a
.env
file via DotNetEnv.
Installation
Add the package to your project (example for NuGet):
dotnet add package NetEnvExtensions
Usage
- Import the namespace:
using NetEnvExtensions;
- Add the extension to your
IConfigurationBuilder
:
DotNetEnv.Env.Load(); // Loads variables from .env into the process environment
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariableSubstitution();
var configuration = builder.Build();
Optional: Pass a logger for diagnostics
If you want to log warnings about missing environment variables, you can pass an ILogger
instance:
using Microsoft.Extensions.Logging;
ILogger logger = ...; // Get or create an ILogger instance
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariableSubstitution(null, logger); // Pass logger as the second argument
This will log warnings if a variable is not found and no default is provided.
- Use environment variables in your appsettings.json:
{
"ConnectionStrings": {
"DefaultConnection": "Server=${DB_HOST:localhost};Port=${DB_PORT:5432};User Id=${DB_USER};Password=${DB_PASS}"
}
}
If an environment variable is not defined, the default value will be used (if specified).
Note: If you want to load environment variables from a
.env
file, you can use a third-party library (e.g., DotNetEnv) before building the configuration. This package does not include .env loading by default.
Typical scenarios
- Local development: Use
.env
file and callDotNetEnv.Env.Load()
before building the configuration. - Docker/Production: Set environment variables via Docker or system, and do not call
DotNetEnv.Env.Load()
.
Loading .env files
If you want to load environment variables from a .env
file, you can use a third-party library such as DotNetEnv before building the configuration:
DotNetEnv.Env.Load(); // Loads variables from .env into the process environment
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariableSubstitution();
Alternative: Integration with DotNetEnv.Configuration
If you use the DotNetEnv.Configuration package, you can integrate .env loading directly into the configuration builder:
_builder
.Configuration.AddJsonFile(
"appsettings.json",
optional: false,
reloadOnChange: true
)
.AddJsonFile(
$"appsettings.{_builder.Environment.EnvironmentName}.json",
optional: true
)
#if DEBUG
.AddDotNetEnv(".env", LoadOptions.TraversePath())
#endif
.AddEnvironmentVariableSubstitution();
This approach loads .env variables only in DEBUG and makes them available for substitution. Requires the DotNetEnv.Configuration package.
Known limitations
- No recursion: Variable substitution does not support nested or recursive variables (e.g.,
${VAR_${NESTED}}
will not be resolved). - Flat variables only: Only flat (non-hierarchical) environment variables are supported.
- No .env loading by default: You must use a third-party library (e.g., DotNetEnv) to load .env files.
- Logging is optional: Warnings about missing variables are logged only if an ILogger is provided explicitly or available in the configuration builder's services.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
.NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.1 is compatible. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.1
- Microsoft.Extensions.Configuration (>= 9.0.7)
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.