NetEnvExtensions 1.0.5

dotnet add package NetEnvExtensions --version 1.0.5
                    
NuGet\Install-Package NetEnvExtensions -Version 1.0.5
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="NetEnvExtensions" Version="1.0.5" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="NetEnvExtensions" Version="1.0.5" />
                    
Directory.Packages.props
<PackageReference Include="NetEnvExtensions" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add NetEnvExtensions --version 1.0.5
                    
#r "nuget: NetEnvExtensions, 1.0.5"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package NetEnvExtensions@1.0.5
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=NetEnvExtensions&version=1.0.5
                    
Install as a Cake Addin
#tool nuget:?package=NetEnvExtensions&version=1.0.5
                    
Install as a Cake Tool

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

  1. Import the namespace:
using NetEnvExtensions;
  1. 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.

  1. 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 call DotNetEnv.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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.5 347 7/11/2025
1.0.4 282 7/11/2025
1.0.3 90 7/11/2025
1.0.2 93 7/11/2025
1.0.1 97 7/11/2025
1.0.0 104 7/11/2025