• Stars
    star
    211
  • Rank 180,690 (Top 4 %)
  • Language
    C#
  • License
    MIT License
  • Created over 6 years ago
  • Updated about 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A library to read .env files in a .NET Core environment

dotenv.net

CircleCI License: MIT Coverage Status NuGet Badge

project icon

dotenv.net is a group of projects that aim to make the process of reading .env files as simple and pain-free as possible in the dotnet ecosystem. It contains a core library that holds the env reading functionality and two libraries that add dependency injection (DI) support for two popular DI systems. If you have ideas or issues, feel free to create an issue.

Important

Version 3 is a huge departure from the previous system of accessing the library functionality. Deprecated methods from version 2.x have been removed as indicated. New functionality has been added but the reading and parsing logic has mostly stayed unchanged meaning at it's heart, is still the same ol' reliable.

Installation

If you are hardcore and want to go the manual route. Then add the following to your csproj file:

<PackageReference Include="dotenv.net" Version="3.0.0"/>

If you're using the Visual Studio package manager console, then run the following:

Install-Package dotenv.net

If you are making use of the dotnet CLI, then run the following in your terminal:

dotnet add package dotenv.net

Usage

Ensure you have declared the necessary namespace at the head of your class file:

using dotenv.net;

Load Environment Variables

Calling the Load() method with no parameters would locate and load the .env file in the same directory that the library is if one exists:

DotEnv.Load();

If you want to be notified of exceptions that occur in the process of loading env files then you can specify that via the configuration options:

DotEnv.Load(options: new DotEnvOptions(ignoreExceptions: false));

You can specify the env files to be loaded. One or more can be loaded. (NOTE: the order in which the env paths are provided is crucial. If there is a duplicate key and value specified in an env file specified later in the list, that value would overwrite the earlier values read). The default is .env:

DotEnv.Load(options: new DotEnvOptions(envFilePaths: new[] {"./path/to/env", "./path/to/second/env"}));

To search up from the executing library's directory for an env file. The directories would be searched upwards i.e given a directory path /path/to/var, The var directory would be searched first, then the to directory and then the path directory. The options allow for probing the directories as well as specifying how high up to search. The defaults are false and 4 directories up:

DotEnv.Load(options: new DotEnvOptions(probeForEnv: true, probeLevelsToSearch: 2)); // this would only search 2 directories up from the executing directory.

If the provided env files are not UTF-8 encoded, then the encoding to use in reading the files can be specified. The default is UTF-8:

using System.Text;
...
DotEnv.Load(options: new DotEnvOptions(encoding: Encoding.ASCII));

To trim extraneous whitespace from the values read from the file(s). The default is false:

DotEnv.Load(options: new DotEnvOptions(trimValues: true));

To skip overwriting an environment variable if it is set. The default is true:

DotEnv.Load(options: new DotEnvOptions(overwriteExistingVars: false));

Read Environment Variables

The Read() method returns a IDictionary<string, string> instance detailing the keys and associated values read from the env files provided. This hase the added advantage of not modifying your system environment variables. The same options as apply to the Load() method, apply to the Read() method as well.

var envVars = DotEnv.Read();
Console.WriteLine(envVars["KEY"]); // would print out whatever value was associated with the 'KEY'

Fluent API

There is a fluent API analogue to the static methods documented above and can be terminated with a Read() or Load() call to return the env value or write to the environment variables .

// to load env vars with the specified options
DotEnv.Fluent()
    .WithExceptions()
    .WithEnvFiles("./path/to/env")
    .WithTrimValues()
    .WithEncoding()
    .WithOverwriteExistingVars()
    .WithProbeForEnv(probeLevelsToSearch: 6)
    .Load();

// to read the env vars with the specified options
var envVars = DotEnv.Fluent()
    .WithoutExceptions()
    .WithEnvFiles() // revert to the default .env file
    .WithoutTrimValues()
    .WithDefaultEncoding()
    .WithoutOverwriteExistingVars()
    .WithoutProbeForEnv()
    .Read();

Environment Variable Helpers

The Utilities namespace provides additional classes to aid in reading environment in a typed manner as well as other sundry assistive methods. Ensure you have declared the necessary namespace at the head of your class file:

using dotenv.net.Utilities;
...
var value = EnvReader.GetStringValue("KEY");

EnvReader Methods

Method Name Description Return Type Default (if applicable)
HasValue(string key) States whether the given key has a value set or not. bool N/A
GetStringValue(string key) Retrieve a value from the current environment by the given key and throws an exception if not found. string N/A
GetIntValue(string key) Retrieve a value from the current environment by the given key and throws an exception if not found. int N/A
GetDoubleValue(string key) Retrieve a value from the current environment by the given key and throws an exception if not found. double N/A
GetDecimalValue(string key) Retrieve a value from the current environment by the given key and throws an exception if not found. decimal N/A
GetBooleanValue(string key) Retrieve a value from the current environment by the given key and throws an exception if not found. bool N/A
TryGetStringValue(string key, out string value) A safer method to use when retrieving values from the environment as it returns a boolean value stating whether it successfully retrieved the value required. bool null
TryGetIntValue(string key, out int value) A safer method to use when retrieving values from the environment as it returns a boolean value stating whether it successfully retrieved the value required. bool 0
TryGetDoubleValue(string key, out double value) A safer method to use when retrieving values from the environment as it returns a boolean value stating whether it successfully retrieved the value required. bool 0.0
TryGetDecimalValue(string key, out decimal value) A safer method to use when retrieving values from the environment as it returns a boolean value stating whether it successfully retrieved the value required. bool 0.0m
TryGetBooleanValue(string key, out bool value) A safer method to use when retrieving values from the environment as it returns a boolean value stating whether it successfully retrieved the value required. bool false

Contributors

Big ups to those who have contributed to these libraries. 👏

@bolorundurowb @joliveros @vizeke @merqlove @tracker1 @NaturalWill @texyh @jonlabelle @Gounlaf @DTTerastar @Mondonno @caveman-d**k

More Repositories

1

shortid

A csharp library to generate short id's. they can be used as primary keys or unique identifiers
C#
218
star
2

Open-Exam-Suite

This project seeks to create an open source exam designer and simulator that will be solace for those wanting to take any simulated examinations.
C#
144
star
3

vCardLib

A .NET standard library for reading vCard files
C#
22
star
4

git-aliases-for-windows

💯 Add oh-my-zsh-like git aliases to your command prompt
Batchfile
19
star
5

moment.net

Basically as much of a dot net port of moment.js as necessary
C#
19
star
6

dotnetANPR

A number plate recognition library for .NET based off javaanpr
C#
14
star
7

aspnetcore-httpclientextensions

Json verb extensions for ASP.NET core HttpClient
C#
9
star
8

meerkat

A library aiming to implement functionality similar to NodeJS's mongoose
C#
7
star
9

VCF-Reader

vcf file reader
C#
5
star
10

logly

A HTTP Request and Response logger for ASP.NET Core
C#
5
star
11

firenotes-api

A .NET Core RESTful Web API to power the fire 🔥 notes app
C#
4
star
12

firenotes

A simple notes app that utilizes Googles firebase for authentication and storage. Built for Android and iOS using Xamarin Forms
C#
4
star
13

PostgresConnString.NET

A library to handle postgres connection strings
C#
3
star
14

whatsapp-web-duo

An Avalonia UI cross-platform app to enable users make use of multiple WhatsApp accounts on their desktops
C#
2
star
15

millify-dotnet

A dotnet library to convert long numbers to pretty, human-readable strings.
C#
2
star
16

emoji-uid-dotnet

A .NET port of the NodeJS emoji-uid project
C#
2
star
17

foursquare-vgc-projects

A repo to hold the foursquare VGC projects
C#
1
star
18

no-comment

A browser plugin that can show or hide comments from social platforms such as YouTube and Facebook as we deserve to view content and form our opinions without bias
JavaScript
1
star
19

NETCover

A code coverage tool for C#
C#
1
star
20

geo-info-service

An open source free web service for retrieving continent, country and state/province info
CSS
1
star
21

read-time-estimator

Estimate read times for HTML and Markdown articles
C#
1
star
22

autobackup

A tool that automates the backup process to external USB storage devices
C#
1
star
23

atheneum-app

A cross-platform app to help users manage their local libraries using Xamarin Forms
TypeScript
1
star
24

crypto-stats

A demo app for Xamarin Android, iOS and Forms that just displays current coin stats
C#
1
star
25

consolify

A rust library to print out any given text in large blocks.
Rust
1
star
26

mongo-url-parser

A small library to parse mongo url strings to extract the database name
C#
1
star
27

open-exam-suite-upgrade-tool

The upgrade tool for older .oef files
C#
1
star
28

dotnet-credentials-in-url-parser

C#
1
star
29

PropertyConfig

This library is developed to provide similar functionality to Java's java.util.Properties class.
C#
1
star