Full Code of aspnet/Configuration for AI

master f64994e06556 cached
179 files
671.0 KB
150.8k tokens
668 symbols
1 requests
Download .txt
Showing preview only (724K chars total). Download the full file or copy to clipboard to get everything.
Repository: aspnet/Configuration
Branch: master
Commit: f64994e06556
Files: 179
Total size: 671.0 KB

Directory structure:
gitextract_p1se3q03/

├── .appveyor.yml
├── .gitattributes
├── .gitignore
├── .travis.yml
├── .vsts-pipelines/
│   └── builds/
│       ├── ci-internal.yml
│       └── ci-public.yml
├── CONTRIBUTING.md
├── Configuration.sln
├── Directory.Build.props
├── Directory.Build.targets
├── LICENSE.txt
├── NuGet.config
├── NuGetPackageVerifier.json
├── README.md
├── build/
│   ├── Key.snk
│   ├── dependencies.props
│   ├── repo.props
│   └── sources.props
├── build.cmd
├── build.sh
├── korebuild-lock.txt
├── korebuild.json
├── run.cmd
├── run.ps1
├── run.sh
├── samples/
│   └── KeyVaultSample/
│       ├── EnvironmentSecretManager.cs
│       ├── KeyVaultSample.csproj
│       ├── Program.cs
│       └── settings.json
├── src/
│   ├── Config/
│   │   ├── ChainedBuilderExtensions.cs
│   │   ├── ChainedConfigurationProvider.cs
│   │   ├── ChainedConfigurationSource.cs
│   │   ├── Config.csproj
│   │   ├── ConfigurationBuilder.cs
│   │   ├── ConfigurationKeyComparer.cs
│   │   ├── ConfigurationProvider.cs
│   │   ├── ConfigurationReloadToken.cs
│   │   ├── ConfigurationRoot.cs
│   │   ├── ConfigurationSection.cs
│   │   ├── MemoryConfigurationBuilderExtensions.cs
│   │   ├── MemoryConfigurationProvider.cs
│   │   ├── MemoryConfigurationSource.cs
│   │   ├── Properties/
│   │   │   ├── AssemblyInfo.cs
│   │   │   └── Resources.Designer.cs
│   │   ├── Resources.resx
│   │   └── baseline.netcore.json
│   ├── Config.Abstractions/
│   │   ├── Config.Abstractions.csproj
│   │   ├── ConfigurationExtensions.cs
│   │   ├── ConfigurationPath.cs
│   │   ├── IConfiguration.cs
│   │   ├── IConfigurationBuilder.cs
│   │   ├── IConfigurationProvider.cs
│   │   ├── IConfigurationRoot.cs
│   │   ├── IConfigurationSection.cs
│   │   ├── IConfigurationSource.cs
│   │   └── baseline.netcore.json
│   ├── Config.AzureKeyVault/
│   │   ├── AzureKeyVaultConfigurationExtensions.cs
│   │   ├── AzureKeyVaultConfigurationProvider.cs
│   │   ├── AzureKeyVaultConfigurationSource.cs
│   │   ├── Config.AzureKeyVault.csproj
│   │   ├── DefaultKeyVaultSecretManager.cs
│   │   ├── IKeyVaultClient.cs
│   │   ├── IKeyVaultSecretManager.cs
│   │   ├── KeyVaultClientWrapper.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   └── baseline.netcore.json
│   ├── Config.Binder/
│   │   ├── BinderOptions.cs
│   │   ├── Config.Binder.csproj
│   │   ├── ConfigurationBinder.cs
│   │   ├── Properties/
│   │   │   ├── AssemblyInfo.cs
│   │   │   └── Resources.Designer.cs
│   │   ├── Resources.resx
│   │   └── baseline.netcore.json
│   ├── Config.CommandLine/
│   │   ├── CommandLineConfigurationExtensions.cs
│   │   ├── CommandLineConfigurationProvider.cs
│   │   ├── CommandLineConfigurationSource.cs
│   │   ├── Config.CommandLine.csproj
│   │   ├── Properties/
│   │   │   ├── AssemblyInfo.cs
│   │   │   └── Resources.Designer.cs
│   │   ├── Resources.resx
│   │   └── baseline.netcore.json
│   ├── Config.EnvironmentVariables/
│   │   ├── Config.EnvironmentVariables.csproj
│   │   ├── EnvironmentVariablesConfigurationProvider.cs
│   │   ├── EnvironmentVariablesConfigurationSource.cs
│   │   ├── EnvironmentVariablesExtensions.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   └── baseline.netcore.json
│   ├── Config.FileExtensions/
│   │   ├── Config.FileExtensions.csproj
│   │   ├── FileConfigurationExtensions.cs
│   │   ├── FileConfigurationProvider.cs
│   │   ├── FileConfigurationSource.cs
│   │   ├── FileLoadExceptionContext.cs
│   │   ├── Properties/
│   │   │   ├── AssemblyInfo.cs
│   │   │   └── Resources.Designer.cs
│   │   ├── Resources.resx
│   │   └── baseline.netcore.json
│   ├── Config.Ini/
│   │   ├── Config.Ini.csproj
│   │   ├── IniConfigurationExtensions.cs
│   │   ├── IniConfigurationProvider.cs
│   │   ├── IniConfigurationSource.cs
│   │   ├── Properties/
│   │   │   ├── AssemblyInfo.cs
│   │   │   └── Resources.Designer.cs
│   │   ├── Resources.resx
│   │   └── baseline.netcore.json
│   ├── Config.Json/
│   │   ├── Config.Json.csproj
│   │   ├── JsonConfigurationExtensions.cs
│   │   ├── JsonConfigurationFileParser.cs
│   │   ├── JsonConfigurationProvider.cs
│   │   ├── JsonConfigurationSource.cs
│   │   ├── Properties/
│   │   │   ├── AssemblyInfo.cs
│   │   │   └── Resources.Designer.cs
│   │   ├── Resources.resx
│   │   └── baseline.netcore.json
│   ├── Config.KeyPerFile/
│   │   ├── Config.KeyPerFile.csproj
│   │   ├── KeyPerFileConfigurationBuilderExtensions.cs
│   │   ├── KeyPerFileConfigurationProvider.cs
│   │   ├── KeyPerFileConfigurationSource.cs
│   │   └── README.md
│   ├── Config.UserSecrets/
│   │   ├── Config.UserSecrets.csproj
│   │   ├── PathHelper.cs
│   │   ├── Properties/
│   │   │   ├── AssemblyInfo.cs
│   │   │   └── Resources.Designer.cs
│   │   ├── Resources.resx
│   │   ├── UserSecretsConfigurationExtensions.cs
│   │   ├── UserSecretsIdAttribute.cs
│   │   ├── baseline.netcore.json
│   │   └── build/
│   │       └── netstandard2.0/
│   │           ├── Microsoft.Extensions.Configuration.UserSecrets.props
│   │           └── Microsoft.Extensions.Configuration.UserSecrets.targets
│   ├── Config.Xml/
│   │   ├── Config.Xml.csproj
│   │   ├── Properties/
│   │   │   ├── AssemblyInfo.cs
│   │   │   └── Resources.Designer.cs
│   │   ├── Resources.resx
│   │   ├── XmlConfigurationExtensions.cs
│   │   ├── XmlConfigurationProvider.cs
│   │   ├── XmlConfigurationSource.cs
│   │   ├── XmlDocumentDecryptor.cs
│   │   └── baseline.netcore.json
│   └── Directory.Build.props
├── test/
│   ├── Config.AzureKeyVault.Test/
│   │   ├── AzureKeyVaultConfigurationTest.cs
│   │   └── Config.AzureKeyVault.Test.csproj
│   ├── Config.Binder.Test/
│   │   ├── Config.Binder.Test.csproj
│   │   ├── ConfigurationBinderTests.cs
│   │   └── ConfigurationCollectionBindingTests.cs
│   ├── Config.CommandLine.Test/
│   │   ├── CommandLineTest.cs
│   │   └── Config.CommandLine.Test.csproj
│   ├── Config.EnvironmentVariables.Test/
│   │   ├── Config.EnvironmentVariables.Test.csproj
│   │   └── EnvironmentVariablesTest.cs
│   ├── Config.FileExtensions.Test/
│   │   ├── Config.FileExtensions.Test.csproj
│   │   └── FileConfigurationBuilderExtensionsTest.cs
│   ├── Config.FunctionalTests/
│   │   ├── ArrayTests.cs
│   │   ├── Config.FunctionalTests.csproj
│   │   ├── ConfigurationTests.cs
│   │   ├── DisposableFileSystem.cs
│   │   └── test.xml
│   ├── Config.Ini.Test/
│   │   ├── Config.Ini.Test.csproj
│   │   ├── IniConfigurationExtensionsTest.cs
│   │   └── IniConfigurationTest.cs
│   ├── Config.Json.Test/
│   │   ├── ArrayTest.cs
│   │   ├── Config.Json.Test.csproj
│   │   ├── JsonConfigurationExtensionsTest.cs
│   │   └── JsonConfigurationTest.cs
│   ├── Config.KeyPerFile.Test/
│   │   ├── Config.KeyPerFile.Test.csproj
│   │   └── KeyPerFileTests.cs
│   ├── Config.Test/
│   │   ├── Config.Test.csproj
│   │   ├── ConfigurationPathComparerTest.cs
│   │   ├── ConfigurationPathTest.cs
│   │   └── ConfigurationTest.cs
│   ├── Config.Test.Common/
│   │   ├── Config.Test.Common.csproj
│   │   ├── ConfigurationProviderExtensions.cs
│   │   └── TestStreamHelpers.cs
│   ├── Config.UserSecrets.Test/
│   │   ├── Config.UserSecrets.Test.csproj
│   │   ├── ConfigurationExtensionTest.cs
│   │   ├── MsBuildTargetTest.cs
│   │   └── PathHelperTest.cs
│   ├── Config.Xml.Test/
│   │   ├── Config.Xml.Test.csproj
│   │   ├── XmlConfigurationExtensionsTest.cs
│   │   └── XmlConfigurationTest.cs
│   └── Directory.Build.props
└── version.props

================================================
FILE CONTENTS
================================================

================================================
FILE: .appveyor.yml
================================================
init:
- git config --global core.autocrlf true
branches:
  only:
  - master
  - /^release\/.*$/
  - /^(.*\/)?ci-.*$/
build_script:
- ps: .\run.ps1 default-build
clone_depth: 1
environment:
  global:
    DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
    DOTNET_CLI_TELEMETRY_OPTOUT: 1
test: 'off'
deploy: 'off'
os: Visual Studio 2017


================================================
FILE: .gitattributes
================================================
*.doc  diff=astextplain
*.DOC	diff=astextplain
*.docx	diff=astextplain
*.DOCX	diff=astextplain
*.dot	diff=astextplain
*.DOT	diff=astextplain
*.pdf	diff=astextplain
*.PDF	diff=astextplain
*.rtf	diff=astextplain
*.RTF	diff=astextplain

*.jpg  	binary
*.png 	binary
*.gif 	binary

*.cs text=auto diff=csharp 
*.vb text=auto
*.resx text=auto
*.c text=auto
*.cpp text=auto
*.cxx text=auto
*.h text=auto
*.hxx text=auto
*.py text=auto
*.rb text=auto
*.java text=auto
*.html text=auto
*.htm text=auto
*.css text=auto
*.scss text=auto
*.sass text=auto
*.less text=auto
*.js text=auto
*.lisp text=auto
*.clj text=auto
*.sql text=auto
*.php text=auto
*.lua text=auto
*.m text=auto
*.asm text=auto
*.erl text=auto
*.fs text=auto
*.fsx text=auto
*.hs text=auto

*.csproj text=auto
*.vbproj text=auto
*.fsproj text=auto
*.dbproj text=auto
*.sln text=auto eol=crlf
*.sh eol=lf


================================================
FILE: .gitignore
================================================
[Oo]bj/
[Bb]in/
TestResults/
.nuget/
_ReSharper.*/
packages/
artifacts/
PublishProfiles/
*.user
*.suo
*.cache
*.docstates
_ReSharper.*
nuget.exe
*net45.csproj
*net451.csproj
*k10.csproj
*.psess
*.vsp
*.pidb
*.userprefs
*DS_Store
*.ncrunchsolution
*.*sdf
*.ipch
*.sln.ide
project.lock.json
.vs
.vscode/
.build/
.testPublish/
*.nuget.props
*.nuget.targets
global.json


================================================
FILE: .travis.yml
================================================
language: csharp
sudo: false
dist: trusty
env:
  global:
  - DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
  - DOTNET_CLI_TELEMETRY_OPTOUT: 1
mono: none
os:
- linux
- osx
osx_image: xcode8.2
addons:
  apt:
    packages:
    - libunwind8
branches:
  only:
  - master
  - /^release\/.*$/
  - /^(.*\/)?ci-.*$/
before_install:
- if test "$TRAVIS_OS_NAME" == "osx"; then brew update; brew install openssl; ln -s
  /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib /usr/local/lib/; ln -s /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
  /usr/local/lib/; fi
script:
- ./build.sh


================================================
FILE: .vsts-pipelines/builds/ci-internal.yml
================================================
trigger:
- master
- release/*

resources:
  repositories:
  - repository: buildtools
    type: git
    name: aspnet-BuildTools
    ref: refs/heads/master

phases:
- template: .vsts-pipelines/templates/project-ci.yml@buildtools


================================================
FILE: .vsts-pipelines/builds/ci-public.yml
================================================
trigger:
- master
- release/*

# See https://github.com/aspnet/BuildTools
resources:
  repositories:
  - repository: buildtools
    type: github
    endpoint: DotNet-Bot GitHub Connection
    name: aspnet/BuildTools
    ref: refs/heads/master

phases:
- template: .vsts-pipelines/templates/project-ci.yml@buildtools


================================================
FILE: CONTRIBUTING.md
================================================
Contributing
======

Information on contributing to this repo is in the [Contributing Guide](https://github.com/aspnet/Home/blob/master/CONTRIBUTING.md) in the Home repo.


================================================
FILE: Configuration.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.26424.2
MinimumVisualStudioVersion = 15.0.26730.03
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{F141E2D0-F9B8-4ADB-A19A-7B6FF4CA19A1}"
	ProjectSection(SolutionItems) = preProject
		src\Directory.Build.props = src\Directory.Build.props
	EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{B54371FF-B920-46C8-8D55-6B19DBB43EBF}"
	ProjectSection(SolutionItems) = preProject
		test\Directory.Build.props = test\Directory.Build.props
	EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Configuration.Json", "src\Config.Json\Config.Json.csproj", "{4C4CD1BC-4411-4AFD-9D04-147053F0E259}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Configuration.Xml", "src\Config.Xml\Config.Xml.csproj", "{1BEC97C1-56B9-4B2B-A95A-C0DF72F1E96A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Configuration.Json.Test", "test\Config.Json.Test\Config.Json.Test.csproj", "{AE8F8C20-9ED9-4A16-9565-27DF77683789}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Configuration.Xml.Test", "test\Config.Xml.Test\Config.Xml.Test.csproj", "{0786C785-944A-4423-96A6-4E7BFDB4A1B0}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Configuration.Test", "test\Config.Test\Config.Test.csproj", "{8777C77E-CA2A-42C1-90CD-2EA9CBF28937}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Configuration", "src\Config\Config.csproj", "{62BD48B5-BB0C-4C2C-9C4B-04CF75CDCCF1}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Configuration.FunctionalTests", "test\Config.FunctionalTests\Config.FunctionalTests.csproj", "{EAC77F15-F12E-496B-9184-1B1DA89BFFE9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Configuration.Abstractions", "src\Config.Abstractions\Config.Abstractions.csproj", "{3F1CB08E-9FBD-4CAE-A78A-4AC43F24FC49}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Configuration.Test.Common", "test\Config.Test.Common\Config.Test.Common.csproj", "{29C120E5-F682-4BFB-826B-040A594802CA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Configuration.CommandLine", "src\Config.CommandLine\Config.CommandLine.csproj", "{D4B7CF9B-4229-44DC-800F-CC39150CEAB2}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Configuration.Ini", "src\Config.Ini\Config.Ini.csproj", "{C555C5D5-BF4A-451E-AB43-EBF4DE885EC7}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Configuration.EnvironmentVariables", "src\Config.EnvironmentVariables\Config.EnvironmentVariables.csproj", "{A6A2C665-E5A4-4FD3-AD0C-E33E6CFFCB88}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Configuration.CommandLine.Test", "test\Config.CommandLine.Test\Config.CommandLine.Test.csproj", "{CE9C8903-AA8A-40E6-B03D-32A08A4A39AF}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Configuration.Ini.Test", "test\Config.Ini.Test\Config.Ini.Test.csproj", "{80A8F10C-E9A6-4677-919D-FE5DB320FEDF}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Configuration.EnvironmentVariables.Test", "test\Config.EnvironmentVariables.Test\Config.EnvironmentVariables.Test.csproj", "{7D0F805B-ADFF-4C47-A90C-24DD74416821}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Configuration.Binder", "src\Config.Binder\Config.Binder.csproj", "{D506FD2F-59A0-4A26-AA6D-E81998B58B34}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Configuration.Binder.Test", "test\Config.Binder.Test\Config.Binder.Test.csproj", "{AE6FFE9B-6378-4D57-AA24-7D257F18B235}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Configuration.FileExtensions", "src\Config.FileExtensions\Config.FileExtensions.csproj", "{881E7CBC-492C-47C5-98A6-61DD1C753EE6}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Configuration.FileExtensions.Test", "test\Config.FileExtensions.Test\Config.FileExtensions.Test.csproj", "{F7932F19-EB68-4C52-9CD1-3B51E48C2337}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Configuration.AzureKeyVault", "src\Config.AzureKeyVault\Config.AzureKeyVault.csproj", "{A538F609-E902-40CE-8459-4248F9F63558}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Configuration.AzureKeyVault.Test", "test\Config.AzureKeyVault.Test\Config.AzureKeyVault.Test.csproj", "{DA9C1F35-3F92-4F3A-B3B1-A62CCE626D48}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{AB015580-541D-4E2D-B904-E71F8582CC68}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KeyVaultSample", "samples\KeyVaultSample\KeyVaultSample.csproj", "{7AAC49A7-939A-40B1-A86A-705464B4667D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Configuration.UserSecrets", "src\Config.UserSecrets\Config.UserSecrets.csproj", "{58B6443B-1278-4DF9-B7BB-DDF3BFFCF868}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Configuration.UserSecrets.Test", "test\Config.UserSecrets.Test\Config.UserSecrets.Test.csproj", "{AC7FAD2A-5763-404D-B0FC-3CCA81A16B0A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Configuration.KeyPerFile", "src\Config.KeyPerFile\Config.KeyPerFile.csproj", "{69AB0230-D82E-438B-AFE5-85BFF414F1B8}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Configuration.KeyPerFile.Test", "test\Config.KeyPerFile.Test\Config.KeyPerFile.Test.csproj", "{82A403ED-F827-4FED-BE38-7F87925A07E1}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{B926267F-98A3-41F0-90F5-0B1ADF78CA65}"
	ProjectSection(SolutionItems) = preProject
		.appveyor.yml = .appveyor.yml
		.travis.yml = .travis.yml
		build.cmd = build.cmd
		build.ps1 = build.ps1
		build.sh = build.sh
		CONTRIBUTING.md = CONTRIBUTING.md
		Directory.Build.props = Directory.Build.props
		Directory.Build.targets = Directory.Build.targets
		LICENSE.txt = LICENSE.txt
		NuGet.config = NuGet.config
		NuGetPackageVerifier.json = NuGetPackageVerifier.json
		README.md = README.md
		version.xml = version.xml
	EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{F786716B-DE4D-4C4D-8D5B-38182329E5B5}"
	ProjectSection(SolutionItems) = preProject
		build\dependencies.props = build\dependencies.props
		build\repo.props = build\repo.props
	EndProjectSection
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Release|Any CPU = Release|Any CPU
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{4C4CD1BC-4411-4AFD-9D04-147053F0E259}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{4C4CD1BC-4411-4AFD-9D04-147053F0E259}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{4C4CD1BC-4411-4AFD-9D04-147053F0E259}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{4C4CD1BC-4411-4AFD-9D04-147053F0E259}.Release|Any CPU.Build.0 = Release|Any CPU
		{1BEC97C1-56B9-4B2B-A95A-C0DF72F1E96A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{1BEC97C1-56B9-4B2B-A95A-C0DF72F1E96A}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{1BEC97C1-56B9-4B2B-A95A-C0DF72F1E96A}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{1BEC97C1-56B9-4B2B-A95A-C0DF72F1E96A}.Release|Any CPU.Build.0 = Release|Any CPU
		{AE8F8C20-9ED9-4A16-9565-27DF77683789}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{AE8F8C20-9ED9-4A16-9565-27DF77683789}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{AE8F8C20-9ED9-4A16-9565-27DF77683789}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{AE8F8C20-9ED9-4A16-9565-27DF77683789}.Release|Any CPU.Build.0 = Release|Any CPU
		{0786C785-944A-4423-96A6-4E7BFDB4A1B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{0786C785-944A-4423-96A6-4E7BFDB4A1B0}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{0786C785-944A-4423-96A6-4E7BFDB4A1B0}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{0786C785-944A-4423-96A6-4E7BFDB4A1B0}.Release|Any CPU.Build.0 = Release|Any CPU
		{8777C77E-CA2A-42C1-90CD-2EA9CBF28937}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{8777C77E-CA2A-42C1-90CD-2EA9CBF28937}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{8777C77E-CA2A-42C1-90CD-2EA9CBF28937}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{8777C77E-CA2A-42C1-90CD-2EA9CBF28937}.Release|Any CPU.Build.0 = Release|Any CPU
		{62BD48B5-BB0C-4C2C-9C4B-04CF75CDCCF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{62BD48B5-BB0C-4C2C-9C4B-04CF75CDCCF1}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{62BD48B5-BB0C-4C2C-9C4B-04CF75CDCCF1}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{62BD48B5-BB0C-4C2C-9C4B-04CF75CDCCF1}.Release|Any CPU.Build.0 = Release|Any CPU
		{EAC77F15-F12E-496B-9184-1B1DA89BFFE9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{EAC77F15-F12E-496B-9184-1B1DA89BFFE9}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{EAC77F15-F12E-496B-9184-1B1DA89BFFE9}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{EAC77F15-F12E-496B-9184-1B1DA89BFFE9}.Release|Any CPU.Build.0 = Release|Any CPU
		{3F1CB08E-9FBD-4CAE-A78A-4AC43F24FC49}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{3F1CB08E-9FBD-4CAE-A78A-4AC43F24FC49}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{3F1CB08E-9FBD-4CAE-A78A-4AC43F24FC49}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{3F1CB08E-9FBD-4CAE-A78A-4AC43F24FC49}.Release|Any CPU.Build.0 = Release|Any CPU
		{29C120E5-F682-4BFB-826B-040A594802CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{29C120E5-F682-4BFB-826B-040A594802CA}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{29C120E5-F682-4BFB-826B-040A594802CA}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{29C120E5-F682-4BFB-826B-040A594802CA}.Release|Any CPU.Build.0 = Release|Any CPU
		{D4B7CF9B-4229-44DC-800F-CC39150CEAB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{D4B7CF9B-4229-44DC-800F-CC39150CEAB2}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{D4B7CF9B-4229-44DC-800F-CC39150CEAB2}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{D4B7CF9B-4229-44DC-800F-CC39150CEAB2}.Release|Any CPU.Build.0 = Release|Any CPU
		{C555C5D5-BF4A-451E-AB43-EBF4DE885EC7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{C555C5D5-BF4A-451E-AB43-EBF4DE885EC7}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{C555C5D5-BF4A-451E-AB43-EBF4DE885EC7}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{C555C5D5-BF4A-451E-AB43-EBF4DE885EC7}.Release|Any CPU.Build.0 = Release|Any CPU
		{A6A2C665-E5A4-4FD3-AD0C-E33E6CFFCB88}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{A6A2C665-E5A4-4FD3-AD0C-E33E6CFFCB88}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{A6A2C665-E5A4-4FD3-AD0C-E33E6CFFCB88}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{A6A2C665-E5A4-4FD3-AD0C-E33E6CFFCB88}.Release|Any CPU.Build.0 = Release|Any CPU
		{CE9C8903-AA8A-40E6-B03D-32A08A4A39AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{CE9C8903-AA8A-40E6-B03D-32A08A4A39AF}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{CE9C8903-AA8A-40E6-B03D-32A08A4A39AF}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{CE9C8903-AA8A-40E6-B03D-32A08A4A39AF}.Release|Any CPU.Build.0 = Release|Any CPU
		{80A8F10C-E9A6-4677-919D-FE5DB320FEDF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{80A8F10C-E9A6-4677-919D-FE5DB320FEDF}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{80A8F10C-E9A6-4677-919D-FE5DB320FEDF}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{80A8F10C-E9A6-4677-919D-FE5DB320FEDF}.Release|Any CPU.Build.0 = Release|Any CPU
		{7D0F805B-ADFF-4C47-A90C-24DD74416821}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{7D0F805B-ADFF-4C47-A90C-24DD74416821}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{7D0F805B-ADFF-4C47-A90C-24DD74416821}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{7D0F805B-ADFF-4C47-A90C-24DD74416821}.Release|Any CPU.Build.0 = Release|Any CPU
		{D506FD2F-59A0-4A26-AA6D-E81998B58B34}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{D506FD2F-59A0-4A26-AA6D-E81998B58B34}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{D506FD2F-59A0-4A26-AA6D-E81998B58B34}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{D506FD2F-59A0-4A26-AA6D-E81998B58B34}.Release|Any CPU.Build.0 = Release|Any CPU
		{AE6FFE9B-6378-4D57-AA24-7D257F18B235}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{AE6FFE9B-6378-4D57-AA24-7D257F18B235}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{AE6FFE9B-6378-4D57-AA24-7D257F18B235}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{AE6FFE9B-6378-4D57-AA24-7D257F18B235}.Release|Any CPU.Build.0 = Release|Any CPU
		{881E7CBC-492C-47C5-98A6-61DD1C753EE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{881E7CBC-492C-47C5-98A6-61DD1C753EE6}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{881E7CBC-492C-47C5-98A6-61DD1C753EE6}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{881E7CBC-492C-47C5-98A6-61DD1C753EE6}.Release|Any CPU.Build.0 = Release|Any CPU
		{F7932F19-EB68-4C52-9CD1-3B51E48C2337}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{F7932F19-EB68-4C52-9CD1-3B51E48C2337}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{F7932F19-EB68-4C52-9CD1-3B51E48C2337}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{F7932F19-EB68-4C52-9CD1-3B51E48C2337}.Release|Any CPU.Build.0 = Release|Any CPU
		{A538F609-E902-40CE-8459-4248F9F63558}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{A538F609-E902-40CE-8459-4248F9F63558}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{A538F609-E902-40CE-8459-4248F9F63558}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{A538F609-E902-40CE-8459-4248F9F63558}.Release|Any CPU.Build.0 = Release|Any CPU
		{DA9C1F35-3F92-4F3A-B3B1-A62CCE626D48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{DA9C1F35-3F92-4F3A-B3B1-A62CCE626D48}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{DA9C1F35-3F92-4F3A-B3B1-A62CCE626D48}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{DA9C1F35-3F92-4F3A-B3B1-A62CCE626D48}.Release|Any CPU.Build.0 = Release|Any CPU
		{7AAC49A7-939A-40B1-A86A-705464B4667D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{7AAC49A7-939A-40B1-A86A-705464B4667D}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{7AAC49A7-939A-40B1-A86A-705464B4667D}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{7AAC49A7-939A-40B1-A86A-705464B4667D}.Release|Any CPU.Build.0 = Release|Any CPU
		{58B6443B-1278-4DF9-B7BB-DDF3BFFCF868}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{58B6443B-1278-4DF9-B7BB-DDF3BFFCF868}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{58B6443B-1278-4DF9-B7BB-DDF3BFFCF868}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{58B6443B-1278-4DF9-B7BB-DDF3BFFCF868}.Release|Any CPU.Build.0 = Release|Any CPU
		{AC7FAD2A-5763-404D-B0FC-3CCA81A16B0A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{AC7FAD2A-5763-404D-B0FC-3CCA81A16B0A}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{AC7FAD2A-5763-404D-B0FC-3CCA81A16B0A}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{AC7FAD2A-5763-404D-B0FC-3CCA81A16B0A}.Release|Any CPU.Build.0 = Release|Any CPU
		{69AB0230-D82E-438B-AFE5-85BFF414F1B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{69AB0230-D82E-438B-AFE5-85BFF414F1B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{69AB0230-D82E-438B-AFE5-85BFF414F1B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{69AB0230-D82E-438B-AFE5-85BFF414F1B8}.Release|Any CPU.Build.0 = Release|Any CPU
		{82A403ED-F827-4FED-BE38-7F87925A07E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{82A403ED-F827-4FED-BE38-7F87925A07E1}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{82A403ED-F827-4FED-BE38-7F87925A07E1}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{82A403ED-F827-4FED-BE38-7F87925A07E1}.Release|Any CPU.Build.0 = Release|Any CPU
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(NestedProjects) = preSolution
		{4C4CD1BC-4411-4AFD-9D04-147053F0E259} = {F141E2D0-F9B8-4ADB-A19A-7B6FF4CA19A1}
		{1BEC97C1-56B9-4B2B-A95A-C0DF72F1E96A} = {F141E2D0-F9B8-4ADB-A19A-7B6FF4CA19A1}
		{AE8F8C20-9ED9-4A16-9565-27DF77683789} = {B54371FF-B920-46C8-8D55-6B19DBB43EBF}
		{0786C785-944A-4423-96A6-4E7BFDB4A1B0} = {B54371FF-B920-46C8-8D55-6B19DBB43EBF}
		{8777C77E-CA2A-42C1-90CD-2EA9CBF28937} = {B54371FF-B920-46C8-8D55-6B19DBB43EBF}
		{62BD48B5-BB0C-4C2C-9C4B-04CF75CDCCF1} = {F141E2D0-F9B8-4ADB-A19A-7B6FF4CA19A1}
		{EAC77F15-F12E-496B-9184-1B1DA89BFFE9} = {B54371FF-B920-46C8-8D55-6B19DBB43EBF}
		{3F1CB08E-9FBD-4CAE-A78A-4AC43F24FC49} = {F141E2D0-F9B8-4ADB-A19A-7B6FF4CA19A1}
		{29C120E5-F682-4BFB-826B-040A594802CA} = {B54371FF-B920-46C8-8D55-6B19DBB43EBF}
		{D4B7CF9B-4229-44DC-800F-CC39150CEAB2} = {F141E2D0-F9B8-4ADB-A19A-7B6FF4CA19A1}
		{C555C5D5-BF4A-451E-AB43-EBF4DE885EC7} = {F141E2D0-F9B8-4ADB-A19A-7B6FF4CA19A1}
		{A6A2C665-E5A4-4FD3-AD0C-E33E6CFFCB88} = {F141E2D0-F9B8-4ADB-A19A-7B6FF4CA19A1}
		{CE9C8903-AA8A-40E6-B03D-32A08A4A39AF} = {B54371FF-B920-46C8-8D55-6B19DBB43EBF}
		{80A8F10C-E9A6-4677-919D-FE5DB320FEDF} = {B54371FF-B920-46C8-8D55-6B19DBB43EBF}
		{7D0F805B-ADFF-4C47-A90C-24DD74416821} = {B54371FF-B920-46C8-8D55-6B19DBB43EBF}
		{D506FD2F-59A0-4A26-AA6D-E81998B58B34} = {F141E2D0-F9B8-4ADB-A19A-7B6FF4CA19A1}
		{AE6FFE9B-6378-4D57-AA24-7D257F18B235} = {B54371FF-B920-46C8-8D55-6B19DBB43EBF}
		{881E7CBC-492C-47C5-98A6-61DD1C753EE6} = {F141E2D0-F9B8-4ADB-A19A-7B6FF4CA19A1}
		{F7932F19-EB68-4C52-9CD1-3B51E48C2337} = {B54371FF-B920-46C8-8D55-6B19DBB43EBF}
		{A538F609-E902-40CE-8459-4248F9F63558} = {F141E2D0-F9B8-4ADB-A19A-7B6FF4CA19A1}
		{DA9C1F35-3F92-4F3A-B3B1-A62CCE626D48} = {B54371FF-B920-46C8-8D55-6B19DBB43EBF}
		{7AAC49A7-939A-40B1-A86A-705464B4667D} = {AB015580-541D-4E2D-B904-E71F8582CC68}
		{58B6443B-1278-4DF9-B7BB-DDF3BFFCF868} = {F141E2D0-F9B8-4ADB-A19A-7B6FF4CA19A1}
		{AC7FAD2A-5763-404D-B0FC-3CCA81A16B0A} = {B54371FF-B920-46C8-8D55-6B19DBB43EBF}
		{69AB0230-D82E-438B-AFE5-85BFF414F1B8} = {F141E2D0-F9B8-4ADB-A19A-7B6FF4CA19A1}
		{82A403ED-F827-4FED-BE38-7F87925A07E1} = {B54371FF-B920-46C8-8D55-6B19DBB43EBF}
		{F786716B-DE4D-4C4D-8D5B-38182329E5B5} = {B926267F-98A3-41F0-90F5-0B1ADF78CA65}
	EndGlobalSection
EndGlobal

================================================
FILE: Directory.Build.props
================================================
<Project>
  <Import
    Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), AspNetCoreSettings.props))\AspNetCoreSettings.props"
    Condition=" '$(CI)' != 'true' AND '$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), AspNetCoreSettings.props))' != '' " />

  <Import Project="version.props" />
  <Import Project="build\dependencies.props" />
  <Import Project="build\sources.props" />

  <PropertyGroup>
    <Product>Microsoft .NET Extensions</Product>
    <RepositoryUrl>https://github.com/aspnet/Configuration</RepositoryUrl>
    <RepositoryType>git</RepositoryType>
    <RepositoryRoot>$(MSBuildThisFileDirectory)</RepositoryRoot>
    <AssemblyOriginatorKeyFile>$(MSBuildThisFileDirectory)build\Key.snk</AssemblyOriginatorKeyFile>
    <SignAssembly>true</SignAssembly>
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
  </PropertyGroup>
</Project>


================================================
FILE: Directory.Build.targets
================================================
<Project>
  <PropertyGroup>
    <RuntimeFrameworkVersion Condition=" '$(TargetFramework)' == 'netcoreapp2.0' ">$(MicrosoftNETCoreApp20PackageVersion)</RuntimeFrameworkVersion>
    <RuntimeFrameworkVersion Condition=" '$(TargetFramework)' == 'netcoreapp2.1' ">$(MicrosoftNETCoreApp21PackageVersion)</RuntimeFrameworkVersion>
    <RuntimeFrameworkVersion Condition=" '$(TargetFramework)' == 'netcoreapp2.2' ">$(MicrosoftNETCoreApp22PackageVersion)</RuntimeFrameworkVersion>
    <NETStandardImplicitPackageVersion Condition=" '$(TargetFramework)' == 'netstandard2.0' ">$(NETStandardLibrary20PackageVersion)</NETStandardImplicitPackageVersion>
    <!-- aspnet/BuildTools#662 Don't police what version of NetCoreApp we use -->
    <NETCoreAppMaximumVersion>99.9</NETCoreAppMaximumVersion>
  </PropertyGroup>
</Project>


================================================
FILE: LICENSE.txt
================================================
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright (c) .NET Foundation and Contributors

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


================================================
FILE: NuGet.config
================================================
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <clear />
    <!-- Restore sources should be defined in build/sources.props. -->
  </packageSources>
</configuration>


================================================
FILE: NuGetPackageVerifier.json
================================================
{
    "Default": {
        "rules": [
            "DefaultCompositeRule"
        ]
    }
}

================================================
FILE: README.md
================================================
Configuration [Archived]
========================

**This GitHub project has been archived.** Ongoing development on this project can be found in <https://github.com/aspnet/Extensions>.

Configuration is a framework for accessing Key/Value based configuration settings in an application. Includes configuration providers for command line arguments, environment variables, INI files, JSON files, and XML files.

This project is part of ASP.NET Core. You can find samples, documentation and getting started instructions for ASP.NET Core at the [AspNetCore](https://github.com/aspnet/AspNetCore) repo.


================================================
FILE: build/dependencies.props
================================================
<Project>
  <PropertyGroup>
    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
  </PropertyGroup>
  <PropertyGroup Label="Package Versions">
    <InternalAspNetCoreSdkPackageVersion>3.0.0-alpha1-20181004.7</InternalAspNetCoreSdkPackageVersion>
    <MicrosoftAspNetCoreTestingPackageVersion>3.0.0-alpha1-10584</MicrosoftAspNetCoreTestingPackageVersion>
    <MicrosoftAzureKeyVaultPackageVersion>2.3.2</MicrosoftAzureKeyVaultPackageVersion>
    <MicrosoftAzureServicesAppAuthenticationPackageVersion>1.0.1</MicrosoftAzureServicesAppAuthenticationPackageVersion>
    <MicrosoftExtensionsFileProvidersPhysicalPackageVersion>3.0.0-alpha1-10584</MicrosoftExtensionsFileProvidersPhysicalPackageVersion>
    <MicrosoftExtensionsPrimitivesPackageVersion>3.0.0-alpha1-10584</MicrosoftExtensionsPrimitivesPackageVersion>
    <MicrosoftNETCoreApp20PackageVersion>2.0.9</MicrosoftNETCoreApp20PackageVersion>
    <MicrosoftNETCoreApp21PackageVersion>2.1.3</MicrosoftNETCoreApp21PackageVersion>
    <MicrosoftNETCoreApp22PackageVersion>2.2.0-preview2-26905-02</MicrosoftNETCoreApp22PackageVersion>
    <MicrosoftNETTestSdkPackageVersion>15.6.1</MicrosoftNETTestSdkPackageVersion>
    <MoqPackageVersion>4.9.0</MoqPackageVersion>
    <NETStandardLibrary20PackageVersion>2.0.3</NETStandardLibrary20PackageVersion>
    <NewtonsoftJsonPackageVersion>11.0.2</NewtonsoftJsonPackageVersion>
    <SystemSecurityCryptographyXmlPackageVersion>4.6.0-preview1-26907-04</SystemSecurityCryptographyXmlPackageVersion>
    <XunitPackageVersion>2.3.1</XunitPackageVersion>
    <XunitRunnerVisualStudioPackageVersion>2.4.0</XunitRunnerVisualStudioPackageVersion>
  </PropertyGroup>
  <PropertyGroup Label="Package Versions: Pinned" />
  <Import Project="$(DotNetPackageVersionPropsPath)" Condition=" '$(DotNetPackageVersionPropsPath)' != '' " />
</Project>


================================================
FILE: build/repo.props
================================================
<Project>
  <Import Project="dependencies.props" />

  <ItemGroup>
    <ExcludeFromTest Include="$(RepositoryRoot)test\Config.AzureKeyVault.Test\Config.AzureKeyVault.Test.csproj" Condition="'$(OS)' != 'Windows_NT'" />
    <ExcludeFromTest Include="$(RepositoryRoot)test\Config.Test.Common\Config.Test.Common.csproj" />
  </ItemGroup>
  <PropertyGroup>
    <!-- These properties are use by the automation that updates dependencies.props -->
    <LineupPackageId>Internal.AspNetCore.Universe.Lineup</LineupPackageId>
    <LineupPackageRestoreSource>https://dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json</LineupPackageRestoreSource>
  </PropertyGroup>

  <ItemGroup>
    <DotNetCoreRuntime Include="$(MicrosoftNETCoreApp20PackageVersion)" />
    <DotNetCoreRuntime Include="$(MicrosoftNETCoreApp21PackageVersion)" />
    <DotNetCoreRuntime Include="$(MicrosoftNETCoreApp22PackageVersion)" />
  </ItemGroup>
</Project>


================================================
FILE: build/sources.props
================================================
<Project>
  <Import Project="$(DotNetRestoreSourcePropsPath)" Condition="'$(DotNetRestoreSourcePropsPath)' != ''"/>

  <PropertyGroup Label="RestoreSources">
    <RestoreSources>$(DotNetRestoreSources)</RestoreSources>
    <RestoreSources Condition="'$(DotNetBuildOffline)' != 'true' AND '$(AspNetUniverseBuildOffline)' != 'true' ">
      $(RestoreSources);
      https://dotnet.myget.org/F/dotnet-core/api/v3/index.json;
      https://dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json;
      https://dotnet.myget.org/F/aspnetcore-tools/api/v3/index.json;
    </RestoreSources>
    <RestoreSources Condition="'$(DotNetBuildOffline)' != 'true'">
      $(RestoreSources);
      https://api.nuget.org/v3/index.json;
    </RestoreSources>
  </PropertyGroup>
</Project>


================================================
FILE: build.cmd
================================================
@ECHO OFF
PowerShell -NoProfile -NoLogo -ExecutionPolicy unrestricted -Command "[System.Threading.Thread]::CurrentThread.CurrentCulture = ''; [System.Threading.Thread]::CurrentThread.CurrentUICulture = '';& '%~dp0run.ps1' default-build %*; exit $LASTEXITCODE"


================================================
FILE: build.sh
================================================
#!/usr/bin/env bash

set -euo pipefail
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

# Call "sync" between "chmod" and execution to prevent "text file busy" error in Docker (aufs)
chmod +x "$DIR/run.sh"; sync
"$DIR/run.sh" default-build "$@"


================================================
FILE: korebuild-lock.txt
================================================
version:3.0.0-alpha1-20181004.7
commithash:27fabdaf2b1d4753c3d2749581694ca65d78f7f2


================================================
FILE: korebuild.json
================================================
{
  "$schema": "https://raw.githubusercontent.com/aspnet/BuildTools/master/tools/korebuild.schema.json",
  "channel": "master"
}


================================================
FILE: run.cmd
================================================
@ECHO OFF
PowerShell -NoProfile -NoLogo -ExecutionPolicy unrestricted -Command "[System.Threading.Thread]::CurrentThread.CurrentCulture = ''; [System.Threading.Thread]::CurrentThread.CurrentUICulture = '';& '%~dp0run.ps1' %*; exit $LASTEXITCODE"


================================================
FILE: run.ps1
================================================
#!/usr/bin/env powershell
#requires -version 4

<#
.SYNOPSIS
Executes KoreBuild commands.

.DESCRIPTION
Downloads korebuild if required. Then executes the KoreBuild command. To see available commands, execute with `-Command help`.

.PARAMETER Command
The KoreBuild command to run.

.PARAMETER Path
The folder to build. Defaults to the folder containing this script.

.PARAMETER Channel
The channel of KoreBuild to download. Overrides the value from the config file.

.PARAMETER DotNetHome
The directory where .NET Core tools will be stored.

.PARAMETER ToolsSource
The base url where build tools can be downloaded. Overrides the value from the config file.

.PARAMETER Update
Updates KoreBuild to the latest version even if a lock file is present.

.PARAMETER Reinstall
Re-installs KoreBuild

.PARAMETER ConfigFile
The path to the configuration file that stores values. Defaults to korebuild.json.

.PARAMETER ToolsSourceSuffix
The Suffix to append to the end of the ToolsSource. Useful for query strings in blob stores.

.PARAMETER CI
Sets up CI specific settings and variables.

.PARAMETER Arguments
Arguments to be passed to the command

.NOTES
This function will create a file $PSScriptRoot/korebuild-lock.txt. This lock file can be committed to source, but does not have to be.
When the lockfile is not present, KoreBuild will create one using latest available version from $Channel.

The $ConfigFile is expected to be an JSON file. It is optional, and the configuration values in it are optional as well. Any options set
in the file are overridden by command line parameters.

.EXAMPLE
Example config file:
```json
{
  "$schema": "https://raw.githubusercontent.com/aspnet/BuildTools/master/tools/korebuild.schema.json",
  "channel": "master",
  "toolsSource": "https://aspnetcore.blob.core.windows.net/buildtools"
}
```
#>
[CmdletBinding(PositionalBinding = $false)]
param(
    [Parameter(Mandatory = $true, Position = 0)]
    [string]$Command,
    [string]$Path = $PSScriptRoot,
    [Alias('c')]
    [string]$Channel,
    [Alias('d')]
    [string]$DotNetHome,
    [Alias('s')]
    [string]$ToolsSource,
    [Alias('u')]
    [switch]$Update,
    [switch]$Reinstall,
    [string]$ToolsSourceSuffix,
    [string]$ConfigFile = $null,
    [switch]$CI,
    [Parameter(ValueFromRemainingArguments = $true)]
    [string[]]$Arguments
)

Set-StrictMode -Version 2
$ErrorActionPreference = 'Stop'

#
# Functions
#

function Get-KoreBuild {

    $lockFile = Join-Path $Path 'korebuild-lock.txt'

    if (!(Test-Path $lockFile) -or $Update) {
        Get-RemoteFile "$ToolsSource/korebuild/channels/$Channel/latest.txt" $lockFile $ToolsSourceSuffix
    }

    $version = Get-Content $lockFile | Where-Object { $_ -like 'version:*' } | Select-Object -first 1
    if (!$version) {
        Write-Error "Failed to parse version from $lockFile. Expected a line that begins with 'version:'"
    }
    $version = $version.TrimStart('version:').Trim()
    $korebuildPath = Join-Paths $DotNetHome ('buildtools', 'korebuild', $version)

    if ($Reinstall -and (Test-Path $korebuildPath)) {
        Remove-Item -Force -Recurse $korebuildPath
    }

    if (!(Test-Path $korebuildPath)) {
        Write-Host -ForegroundColor Magenta "Downloading KoreBuild $version"
        New-Item -ItemType Directory -Path $korebuildPath | Out-Null
        $remotePath = "$ToolsSource/korebuild/artifacts/$version/korebuild.$version.zip"

        try {
            $tmpfile = Join-Path ([IO.Path]::GetTempPath()) "KoreBuild-$([guid]::NewGuid()).zip"
            Get-RemoteFile $remotePath $tmpfile $ToolsSourceSuffix
            if (Get-Command -Name 'Microsoft.PowerShell.Archive\Expand-Archive' -ErrorAction Ignore) {
                # Use built-in commands where possible as they are cross-plat compatible
                Microsoft.PowerShell.Archive\Expand-Archive -Path $tmpfile -DestinationPath $korebuildPath
            }
            else {
                # Fallback to old approach for old installations of PowerShell
                Add-Type -AssemblyName System.IO.Compression.FileSystem
                [System.IO.Compression.ZipFile]::ExtractToDirectory($tmpfile, $korebuildPath)
            }
        }
        catch {
            Remove-Item -Recurse -Force $korebuildPath -ErrorAction Ignore
            throw
        }
        finally {
            Remove-Item $tmpfile -ErrorAction Ignore
        }
    }

    return $korebuildPath
}

function Join-Paths([string]$path, [string[]]$childPaths) {
    $childPaths | ForEach-Object { $path = Join-Path $path $_ }
    return $path
}

function Get-RemoteFile([string]$RemotePath, [string]$LocalPath, [string]$RemoteSuffix) {
    if ($RemotePath -notlike 'http*') {
        Copy-Item $RemotePath $LocalPath
        return
    }

    $retries = 10
    while ($retries -gt 0) {
        $retries -= 1
        try {
            Invoke-WebRequest -UseBasicParsing -Uri $($RemotePath + $RemoteSuffix) -OutFile $LocalPath
            return
        }
        catch {
            Write-Verbose "Request failed. $retries retries remaining"
        }
    }

    Write-Error "Download failed: '$RemotePath'."
}

#
# Main
#

# Load configuration or set defaults

$Path = Resolve-Path $Path
if (!$ConfigFile) { $ConfigFile = Join-Path $Path 'korebuild.json' }

if (Test-Path $ConfigFile) {
    try {
        $config = Get-Content -Raw -Encoding UTF8 -Path $ConfigFile | ConvertFrom-Json
        if ($config) {
            if (!($Channel) -and (Get-Member -Name 'channel' -InputObject $config)) { [string] $Channel = $config.channel }
            if (!($ToolsSource) -and (Get-Member -Name 'toolsSource' -InputObject $config)) { [string] $ToolsSource = $config.toolsSource}
        }
    }
    catch {
        Write-Host -ForegroundColor Red $Error[0]
        Write-Error "$ConfigFile contains invalid JSON."
        exit 1
    }
}

if (!$DotNetHome) {
    $DotNetHome = if ($env:DOTNET_HOME) { $env:DOTNET_HOME } `
        elseif ($env:USERPROFILE) { Join-Path $env:USERPROFILE '.dotnet'} `
        elseif ($env:HOME) {Join-Path $env:HOME '.dotnet'}`
        else { Join-Path $PSScriptRoot '.dotnet'}
}

if (!$Channel) { $Channel = 'master' }
if (!$ToolsSource) { $ToolsSource = 'https://aspnetcore.blob.core.windows.net/buildtools' }

# Execute

$korebuildPath = Get-KoreBuild
Import-Module -Force -Scope Local (Join-Path $korebuildPath 'KoreBuild.psd1')

try {
    Set-KoreBuildSettings -ToolsSource $ToolsSource -DotNetHome $DotNetHome -RepoPath $Path -ConfigFile $ConfigFile -CI:$CI
    Invoke-KoreBuildCommand $Command @Arguments
}
finally {
    Remove-Module 'KoreBuild' -ErrorAction Ignore
}


================================================
FILE: run.sh
================================================
#!/usr/bin/env bash

set -euo pipefail

#
# variables
#

RESET="\033[0m"
RED="\033[0;31m"
YELLOW="\033[0;33m"
MAGENTA="\033[0;95m"
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
[ -z "${DOTNET_HOME:-}" ] && DOTNET_HOME="$HOME/.dotnet"
verbose=false
update=false
reinstall=false
repo_path="$DIR"
channel=''
tools_source=''
tools_source_suffix=''
ci=false

#
# Functions
#
__usage() {
    echo "Usage: $(basename "${BASH_SOURCE[0]}") command [options] [[--] <Arguments>...]"
    echo ""
    echo "Arguments:"
    echo "    command                The command to be run."
    echo "    <Arguments>...         Arguments passed to the command. Variable number of arguments allowed."
    echo ""
    echo "Options:"
    echo "    --verbose                                             Show verbose output."
    echo "    -c|--channel <CHANNEL>                                The channel of KoreBuild to download. Overrides the value from the config file.."
    echo "    --config-file <FILE>                                  The path to the configuration file that stores values. Defaults to korebuild.json."
    echo "    -d|--dotnet-home <DIR>                                The directory where .NET Core tools will be stored. Defaults to '\$DOTNET_HOME' or '\$HOME/.dotnet."
    echo "    --path <PATH>                                         The directory to build. Defaults to the directory containing the script."
    echo "    -s|--tools-source|-ToolsSource <URL>                  The base url where build tools can be downloaded. Overrides the value from the config file."
    echo "    --tools-source-suffix|-ToolsSourceSuffix <SUFFIX>     The suffix to append to tools-source. Useful for query strings."
    echo "    -u|--update                                           Update to the latest KoreBuild even if the lock file is present."
    echo "    --reinstall                                           Reinstall KoreBuild."
    echo "    --ci                                                  Apply CI specific settings and environment variables."
    echo ""
    echo "Description:"
    echo "    This function will create a file \$DIR/korebuild-lock.txt. This lock file can be committed to source, but does not have to be."
    echo "    When the lockfile is not present, KoreBuild will create one using latest available version from \$channel."

    if [[ "${1:-}" != '--no-exit' ]]; then
        exit 2
    fi
}

get_korebuild() {
    local version
    local lock_file="$repo_path/korebuild-lock.txt"
    if [ ! -f "$lock_file" ] || [ "$update" = true ]; then
        __get_remote_file "$tools_source/korebuild/channels/$channel/latest.txt" "$lock_file" "$tools_source_suffix"
    fi
    version="$(grep 'version:*' -m 1 "$lock_file")"
    if [[ "$version" == '' ]]; then
        __error "Failed to parse version from $lock_file. Expected a line that begins with 'version:'"
        return 1
    fi
    version="$(echo "${version#version:}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
    local korebuild_path="$DOTNET_HOME/buildtools/korebuild/$version"

    if [ "$reinstall" = true ] && [ -d "$korebuild_path" ]; then
        rm -rf "$korebuild_path"
    fi

    {
        if [ ! -d "$korebuild_path" ]; then
            mkdir -p "$korebuild_path"
            local remote_path="$tools_source/korebuild/artifacts/$version/korebuild.$version.zip"
            tmpfile="$(mktemp)"
            echo -e "${MAGENTA}Downloading KoreBuild ${version}${RESET}"
            if __get_remote_file "$remote_path" "$tmpfile" "$tools_source_suffix"; then
                unzip -q -d "$korebuild_path" "$tmpfile"
            fi
            rm "$tmpfile" || true
        fi

        source "$korebuild_path/KoreBuild.sh"
    } || {
        if [ -d "$korebuild_path" ]; then
            echo "Cleaning up after failed installation"
            rm -rf "$korebuild_path" || true
        fi
        return 1
    }
}

__error() {
    echo -e "${RED}error: $*${RESET}" 1>&2
}

__warn() {
    echo -e "${YELLOW}warning: $*${RESET}"
}

__machine_has() {
    hash "$1" > /dev/null 2>&1
    return $?
}

__get_remote_file() {
    local remote_path=$1
    local local_path=$2
    local remote_path_suffix=$3

    if [[ "$remote_path" != 'http'* ]]; then
        cp "$remote_path" "$local_path"
        return 0
    fi

    local failed=false
    if __machine_has wget; then
        wget --tries 10 --quiet -O "$local_path" "${remote_path}${remote_path_suffix}" || failed=true
    else
        failed=true
    fi

    if [ "$failed" = true ] && __machine_has curl; then
        failed=false
        curl --retry 10 -sSL -f --create-dirs -o "$local_path" "${remote_path}${remote_path_suffix}" || failed=true
    fi

    if [ "$failed" = true ]; then
        __error "Download failed: $remote_path" 1>&2
        return 1
    fi
}

#
# main
#

command="${1:-}"
shift

while [[ $# -gt 0 ]]; do
    case $1 in
        -\?|-h|--help)
            __usage --no-exit
            exit 0
            ;;
        -c|--channel|-Channel)
            shift
            channel="${1:-}"
            [ -z "$channel" ] && __usage
            ;;
        --config-file|-ConfigFile)
            shift
            config_file="${1:-}"
            [ -z "$config_file" ] && __usage
            if [ ! -f "$config_file" ]; then
                __error "Invalid value for --config-file. $config_file does not exist."
                exit 1
            fi
            ;;
        -d|--dotnet-home|-DotNetHome)
            shift
            DOTNET_HOME="${1:-}"
            [ -z "$DOTNET_HOME" ] && __usage
            ;;
        --path|-Path)
            shift
            repo_path="${1:-}"
            [ -z "$repo_path" ] && __usage
            ;;
        -s|--tools-source|-ToolsSource)
            shift
            tools_source="${1:-}"
            [ -z "$tools_source" ] && __usage
            ;;
        --tools-source-suffix|-ToolsSourceSuffix)
            shift
            tools_source_suffix="${1:-}"
            [ -z "$tools_source_suffix" ] && __usage
            ;;
        -u|--update|-Update)
            update=true
            ;;
        --reinstall|-[Rr]einstall)
            reinstall=true
            ;;
        --ci|-[Cc][Ii])
            ci=true
            ;;
        --verbose|-Verbose)
            verbose=true
            ;;
        --)
            shift
            break
            ;;
        *)
            break
            ;;
    esac
    shift
done

if ! __machine_has unzip; then
    __error 'Missing required command: unzip'
    exit 1
fi

if ! __machine_has curl && ! __machine_has wget; then
    __error 'Missing required command. Either wget or curl is required.'
    exit 1
fi

[ -z "${config_file:-}" ] && config_file="$repo_path/korebuild.json"
if [ -f "$config_file" ]; then
    if __machine_has jq ; then
        if jq '.' "$config_file" >/dev/null ; then
            config_channel="$(jq -r 'select(.channel!=null) | .channel' "$config_file")"
            config_tools_source="$(jq -r 'select(.toolsSource!=null) | .toolsSource' "$config_file")"
        else
            __error "$config_file contains invalid JSON."
            exit 1
        fi
    elif __machine_has python ; then
        if python -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'))" >/dev/null ; then
            config_channel="$(python -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'));print(obj['channel'] if 'channel' in obj else '')")"
            config_tools_source="$(python -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'));print(obj['toolsSource'] if 'toolsSource' in obj else '')")"
        else
            __error "$config_file contains invalid JSON."
            exit 1
        fi
    elif __machine_has python3 ; then
        if python3 -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'))" >/dev/null ; then
            config_channel="$(python3 -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'));print(obj['channel'] if 'channel' in obj else '')")"
            config_tools_source="$(python3 -c "import json,codecs;obj=json.load(codecs.open('$config_file', 'r', 'utf-8-sig'));print(obj['toolsSource'] if 'toolsSource' in obj else '')")"
        else
            __error "$config_file contains invalid JSON."
            exit 1
        fi
    else
        __error 'Missing required command: jq or python. Could not parse the JSON file.'
        exit 1
    fi

    [ ! -z "${config_channel:-}" ] && channel="$config_channel"
    [ ! -z "${config_tools_source:-}" ] && tools_source="$config_tools_source"
fi

[ -z "$channel" ] && channel='master'
[ -z "$tools_source" ] && tools_source='https://aspnetcore.blob.core.windows.net/buildtools'

get_korebuild
set_korebuildsettings "$tools_source" "$DOTNET_HOME" "$repo_path" "$config_file" "$ci"
invoke_korebuild_command "$command" "$@"


================================================
FILE: samples/KeyVaultSample/EnvironmentSecretManager.cs
================================================
using Microsoft.Azure.KeyVault.Models;
using Microsoft.Extensions.Configuration.AzureKeyVault;

namespace ConsoleApplication
{
    public class EnvironmentSecretManager : DefaultKeyVaultSecretManager
    {
        private readonly string _environmentPrefix;

        public EnvironmentSecretManager(string environment)
        {
            _environmentPrefix = environment + "-";
        }

        public override bool Load(SecretItem secret)
        {
            return HasEnvironmentPrefix(secret.Identifier.Name);
        }

        public override string GetKey(SecretBundle secret)
        {
            var keyName = base.GetKey(secret);

            return HasEnvironmentPrefix(keyName)
                ? keyName.Substring(_environmentPrefix.Length)
                : keyName;
        }

        private bool HasEnvironmentPrefix(string name)
        {
            return name.StartsWith(_environmentPrefix);
        }
    }
}


================================================
FILE: samples/KeyVaultSample/KeyVaultSample.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks>netcoreapp2.2;net461</TargetFrameworks>
    <DebugType>portable</DebugType>
    <OutputType>Exe</OutputType>
  </PropertyGroup>

  <ItemGroup>
    <Content Include="settings.json" CopyToOutputDirectory="PreserveNewest" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\..\src\Config.AzureKeyVault\Config.AzureKeyVault.csproj" />
    <ProjectReference Include="..\..\src\Config.Json\Config.Json.csproj" />
  </ItemGroup>

</Project>


================================================
FILE: samples/KeyVaultSample/Program.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using Microsoft.Extensions.Configuration;

namespace ConsoleApplication
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var builder = new ConfigurationBuilder();
            builder.AddJsonFile("settings.json");

            var config = builder.Build();

            var store = new X509Store(StoreLocation.CurrentUser);
            store.Open(OpenFlags.ReadOnly);
            var cert = store.Certificates.Find(X509FindType.FindByThumbprint, config["CertificateThumbprint"], false);

            builder.AddAzureKeyVault(
                config["Vault"],
                config["ClientId"],
                cert.OfType<X509Certificate2>().Single(),
                new EnvironmentSecretManager("Development"));
            store.Close();

            config = builder.Build();

            Console.WriteLine(config["ConnectionString"]);
        }
    }
}


================================================
FILE: samples/KeyVaultSample/settings.json
================================================
{
  "CertificateThumbprint": "",
  "Vault": "",
  "ClientId": ""
}


================================================
FILE: src/Config/ChainedBuilderExtensions.cs
================================================
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System;
using System.Collections.Generic;

namespace Microsoft.Extensions.Configuration
{
    /// <summary>
    /// IConfigurationBuilder extension methods for the chaind configuration provider.
    /// </summary>
    public static class ChainedBuilderExtensions
    {
        /// <summary>
        /// Adds an existing configuration to <paramref name="configurationBuilder"/>.
        /// </summary>
        /// <param name="configurationBuilder">The <see cref="IConfigurationBuilder"/> to add to.</param>
        /// <param name="config">The <see cref="IConfiguration"/> to add.</param>
        /// <returns>The <see cref="IConfigurationBuilder"/>.</returns>
        public static IConfigurationBuilder AddConfiguration(this IConfigurationBuilder configurationBuilder, IConfiguration config)
        {
            if (configurationBuilder == null)
            {
                throw new ArgumentNullException(nameof(configurationBuilder));
            }
            if (config == null)
            {
                throw new ArgumentNullException(nameof(config));
            }

            configurationBuilder.Add(new ChainedConfigurationSource { Configuration = config });
            return configurationBuilder;
        }
    }
}


================================================
FILE: src/Config/ChainedConfigurationProvider.cs
================================================
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Extensions.Primitives;

namespace Microsoft.Extensions.Configuration
{
    /// <summary>
    /// Chained implementation of <see cref="IConfigurationProvider"/>
    /// </summary>
    public class ChainedConfigurationProvider : IConfigurationProvider
    {
        private readonly IConfiguration _config;

        /// <summary>
        /// Initialize a new instance from the source configuration.
        /// </summary>
        /// <param name="source">The source configuration.</param>
        public ChainedConfigurationProvider(ChainedConfigurationSource source)
        {
            if (source == null)
            {
                throw new ArgumentNullException(nameof(source));
            }
            if (source.Configuration == null)
            {
                throw new ArgumentNullException(nameof(source.Configuration));
            }

            _config = source.Configuration;
        }

        /// <summary>
        /// Tries to get a configuration value for the specified key.
        /// </summary>
        /// <param name="key">The key.</param>
        /// <param name="value">The value.</param>
        /// <returns><c>True</c> if a value for the specified key was found, otherwise <c>false</c>.</returns>
        public bool TryGet(string key, out string value)
        {
            value = _config[key];
            return !string.IsNullOrEmpty(value);
        }

        /// <summary>
        /// Sets a configuration value for the specified key.
        /// </summary>
        /// <param name="key">The key.</param>
        /// <param name="value">The value.</param>
        public void Set(string key, string value) => _config[key] = value;

        /// <summary>
        /// Returns a change token if this provider supports change tracking, null otherwise.
        /// </summary>
        /// <returns></returns>
        public IChangeToken GetReloadToken() => _config.GetReloadToken();

        /// <summary>
        /// Loads configuration values from the source represented by this <see cref="IConfigurationProvider"/>.
        /// </summary>
        public void Load() { }

        /// <summary>
        /// Returns the immediate descendant configuration keys for a given parent path based on this
        /// <see cref="IConfigurationProvider"/>'s data and the set of keys returned by all the preceding
        /// <see cref="IConfigurationProvider"/>s.
        /// </summary>
        /// <param name="earlierKeys">The child keys returned by the preceding providers for the same parent path.</param>
        /// <param name="parentPath">The parent path.</param>
        /// <returns>The child keys.</returns>
        public IEnumerable<string> GetChildKeys(
            IEnumerable<string> earlierKeys,
            string parentPath)
        {
            var section = parentPath == null ? _config : _config.GetSection(parentPath);
            var children = section.GetChildren();
            var keys = new List<string>();
            keys.AddRange(children.Select(c => c.Key));
            return keys.Concat(earlierKeys)
                .OrderBy(k => k, ConfigurationKeyComparer.Instance);
        }
    }
}


================================================
FILE: src/Config/ChainedConfigurationSource.cs
================================================
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

namespace Microsoft.Extensions.Configuration
{
    /// <summary>
    /// Represents a chained IConfiguration as an <see cref="IConfigurationSource"/>.
    /// </summary>
    public class ChainedConfigurationSource : IConfigurationSource
    {
        /// <summary>
        /// The chained configuration.
        /// </summary>
        public IConfiguration Configuration { get; set; }

        /// <summary>
        /// Builds the <see cref="ChainedConfigurationProvider"/> for this source.
        /// </summary>
        /// <param name="builder">The <see cref="IConfigurationBuilder"/>.</param>
        /// <returns>A <see cref="ChainedConfigurationProvider"/></returns>
        public IConfigurationProvider Build(IConfigurationBuilder builder)
            => new ChainedConfigurationProvider(this);
    }
}


================================================
FILE: src/Config/Config.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <AssemblyName>Microsoft.Extensions.Configuration</AssemblyName>
    <RootNamespace>Microsoft.Extensions.Configuration</RootNamespace>
    <Description>Implementation of key-value pair based configuration for Microsoft.Extensions.Configuration. Includes the memory configuration provider.</Description>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\Config.Abstractions\Config.Abstractions.csproj" />
  </ItemGroup>

</Project>


================================================
FILE: src/Config/ConfigurationBuilder.cs
================================================
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System;
using System.Collections.Generic;

namespace Microsoft.Extensions.Configuration
{
    /// <summary>
    /// Used to build key/value based configuration settings for use in an application.
    /// </summary>
    public class ConfigurationBuilder : IConfigurationBuilder
    {
        /// <summary>
        /// Returns the sources used to obtain configuration values.
        /// </summary>
        public IList<IConfigurationSource> Sources { get; } = new List<IConfigurationSource>();

        /// <summary>
        /// Gets a key/value collection that can be used to share data between the <see cref="IConfigurationBuilder"/>
        /// and the registered <see cref="IConfigurationProvider"/>s.
        /// </summary>
        public IDictionary<string, object> Properties { get; } = new Dictionary<string, object>();

        /// <summary>
        /// Adds a new configuration source.
        /// </summary>
        /// <param name="source">The configuration source to add.</param>
        /// <returns>The same <see cref="IConfigurationBuilder"/>.</returns>
        public IConfigurationBuilder Add(IConfigurationSource source)
        {
            if (source == null)
            {
                throw new ArgumentNullException(nameof(source));
            }

            Sources.Add(source);
            return this;
        }

        /// <summary>
        /// Builds an <see cref="IConfiguration"/> with keys and values from the set of providers registered in
        /// <see cref="Sources"/>.
        /// </summary>
        /// <returns>An <see cref="IConfigurationRoot"/> with keys and values from the registered providers.</returns>
        public IConfigurationRoot Build()
        {
            var providers = new List<IConfigurationProvider>();
            foreach (var source in Sources)
            {
                var provider = source.Build(this);
                providers.Add(provider);
            }
            return new ConfigurationRoot(providers);
        }
    }
}


================================================
FILE: src/Config/ConfigurationKeyComparer.cs
================================================
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System;
using System.Collections.Generic;

namespace Microsoft.Extensions.Configuration
{
    /// <summary>
    /// IComparer implementation used to order configuration keys.
    /// </summary>
    public class ConfigurationKeyComparer : IComparer<string>
    {
        private static readonly string[] _keyDelimiterArray = new[] { ConfigurationPath.KeyDelimiter };
        
        /// <summary>
        /// The default instance.
        /// </summary>
        public static ConfigurationKeyComparer Instance { get; } = new ConfigurationKeyComparer();

        /// <summary>
        /// Compares two strings.
        /// </summary>
        /// <param name="x">First string.</param>
        /// <param name="y">Second string.</param>
        /// <returns></returns>
        public int Compare(string x, string y)
        {
            var xParts = x?.Split(_keyDelimiterArray, StringSplitOptions.RemoveEmptyEntries) ?? new string[0];
            var yParts = y?.Split(_keyDelimiterArray, StringSplitOptions.RemoveEmptyEntries) ?? new string[0];

            // Compare each part until we get two parts that are not equal
            for (int i = 0; i < Math.Min(xParts.Length, yParts.Length); i++)
            {
                x = xParts[i];
                y = yParts[i];

                var value1 = 0;
                var value2 = 0;

                var xIsInt = x != null && int.TryParse(x, out value1);
                var yIsInt = y != null && int.TryParse(y, out value2);

                int result = 0;

                if (!xIsInt && !yIsInt)
                {
                    // Both are strings
                    result = string.Compare(x, y, StringComparison.OrdinalIgnoreCase);
                }
                else if (xIsInt && yIsInt)
                {
                    // Both are int 
                    result = value1 - value2;
                }
                else
                {
                    // Only one of them is int
                    result = xIsInt ? -1 : 1;
                }

                if (result != 0)
                {
                    // One of them is different
                    return result;
                }
            }

            // If we get here, the common parts are equal.
            // If they are of the same length, then they are totally identical
            return xParts.Length - yParts.Length;
        }
    }
}


================================================
FILE: src/Config/ConfigurationProvider.cs
================================================
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using Microsoft.Extensions.Primitives;

namespace Microsoft.Extensions.Configuration
{
    /// <summary>
    /// Base helper class for implementing an <see cref="IConfigurationProvider"/>
    /// </summary>
    public abstract class ConfigurationProvider : IConfigurationProvider
    {
        private ConfigurationReloadToken _reloadToken = new ConfigurationReloadToken();

        /// <summary>
        /// Initializes a new <see cref="IConfigurationProvider"/>
        /// </summary>
        protected ConfigurationProvider()
        {
            Data = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
        }

        /// <summary>
        /// The configuration key value pairs for this provider.
        /// </summary>
        protected IDictionary<string, string> Data { get; set; }

        /// <summary>
        /// Attempts to find a value with the given key, returns true if one is found, false otherwise.
        /// </summary>
        /// <param name="key">The key to lookup.</param>
        /// <param name="value">The value found at key if one is found.</param>
        /// <returns>True if key has a value, false otherwise.</returns>
        public virtual bool TryGet(string key, out string value)
            => Data.TryGetValue(key, out value);

        /// <summary>
        /// Sets a value for a given key.
        /// </summary>
        /// <param name="key">The configuration key to set.</param>
        /// <param name="value">The value to set.</param>
        public virtual void Set(string key, string value)
            => Data[key] = value;

        /// <summary>
        /// Loads (or reloads) the data for this provider.
        /// </summary>
        public virtual void Load()
        { }
       
        /// <summary>
        /// Returns the list of keys that this provider has.
        /// </summary>
        /// <param name="earlierKeys">The earlier keys that other providers contain.</param>
        /// <param name="parentPath">The path for the parent IConfiguration.</param>
        /// <returns>The list of keys for this provider.</returns>
        public virtual IEnumerable<string> GetChildKeys(
            IEnumerable<string> earlierKeys,
            string parentPath)
        {
            var prefix = parentPath == null ? string.Empty : parentPath + ConfigurationPath.KeyDelimiter;

            return Data
                .Where(kv => kv.Key.StartsWith(prefix, StringComparison.OrdinalIgnoreCase))
                .Select(kv => Segment(kv.Key, prefix.Length))
                .Concat(earlierKeys)
                .OrderBy(k => k, ConfigurationKeyComparer.Instance);
        }

        private static string Segment(string key, int prefixLength)
        {
            var indexOf = key.IndexOf(ConfigurationPath.KeyDelimiter, prefixLength, StringComparison.OrdinalIgnoreCase);
            return indexOf < 0 ? key.Substring(prefixLength) : key.Substring(prefixLength, indexOf - prefixLength);
        }

        /// <summary>
        /// Returns a <see cref="IChangeToken"/> that can be used to listen when this provider is reloaded.
        /// </summary>
        /// <returns></returns>
        public IChangeToken GetReloadToken()
        {
            return _reloadToken;
        }

        /// <summary>
        /// Triggers the reload change token and creates a new one.
        /// </summary>
        protected void OnReload()
        {
            var previousToken = Interlocked.Exchange(ref _reloadToken, new ConfigurationReloadToken());
            previousToken.OnReload();
        }
    }
}


================================================
FILE: src/Config/ConfigurationReloadToken.cs
================================================
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System;
using System.Threading;
using Microsoft.Extensions.Primitives;

namespace Microsoft.Extensions.Configuration
{
    /// <summary>
    /// Implements <see cref="IChangeToken"/>
    /// </summary>
    public class ConfigurationReloadToken : IChangeToken
    {
        private CancellationTokenSource _cts = new CancellationTokenSource();

        /// <summary>
        /// Indicates if this token will proactively raise callbacks. Callbacks are still guaranteed to be invoked, eventually.
        /// </summary>
        public bool ActiveChangeCallbacks => true;

        /// <summary>
        /// Gets a value that indicates if a change has occurred.
        /// </summary>
        public bool HasChanged => _cts.IsCancellationRequested;

        /// <summary>
        /// Registers for a callback that will be invoked when the entry has changed. <see cref="Microsoft.Extensions.Primitives.IChangeToken.HasChanged"/>
        /// MUST be set before the callback is invoked.
        /// </summary>
        /// <param name="callback">The callback to invoke.</param>
        /// <param name="state">State to be passed into the callback.</param>
        /// <returns></returns>
        public IDisposable RegisterChangeCallback(Action<object> callback, object state) => _cts.Token.Register(callback, state);

        /// <summary>
        /// Used to trigger the change token when a reload occurs.
        /// </summary>
        public void OnReload() => _cts.Cancel();
    }
}


================================================
FILE: src/Config/ConfigurationRoot.cs
================================================
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using Microsoft.Extensions.Primitives;

namespace Microsoft.Extensions.Configuration
{
    /// <summary>
    /// The root node for a configuration.
    /// </summary>
    public class ConfigurationRoot : IConfigurationRoot
    {
        private IList<IConfigurationProvider> _providers;
        private ConfigurationReloadToken _changeToken = new ConfigurationReloadToken();

        /// <summary>
        /// Initializes a Configuration root with a list of providers.
        /// </summary>
        /// <param name="providers">The <see cref="IConfigurationProvider"/>s for this configuration.</param>
        public ConfigurationRoot(IList<IConfigurationProvider> providers)
        {
            if (providers == null)
            {
                throw new ArgumentNullException(nameof(providers));
            }

            _providers = providers;
            foreach (var p in providers)
            {
                p.Load();
                ChangeToken.OnChange(() => p.GetReloadToken(), () => RaiseChanged());
            }
        }

        /// <summary>
        /// The <see cref="IConfigurationProvider"/>s for this configuration.
        /// </summary>
        public IEnumerable<IConfigurationProvider> Providers => _providers;

        /// <summary>
        /// Gets or sets the value corresponding to a configuration key.
        /// </summary>
        /// <param name="key">The configuration key.</param>
        /// <returns>The configuration value.</returns>
        public string this[string key]
        {
            get
            {
                foreach (var provider in _providers.Reverse())
                {
                    string value;

                    if (provider.TryGet(key, out value))
                    {
                        return value;
                    }
                }

                return null;
            }

            set
            {
                if (!_providers.Any())
                {
                    throw new InvalidOperationException(Resources.Error_NoSources);
                }

                foreach (var provider in _providers)
                {
                    provider.Set(key, value);
                }
            }
        }

        /// <summary>
        /// Gets the immediate children sub-sections.
        /// </summary>
        /// <returns></returns>
        public IEnumerable<IConfigurationSection> GetChildren() => GetChildrenImplementation(null);

        internal IEnumerable<IConfigurationSection> GetChildrenImplementation(string path)
        {
            return _providers
                .Aggregate(Enumerable.Empty<string>(),
                    (seed, source) => source.GetChildKeys(seed, path))
                .Distinct()
                .Select(key => GetSection(path == null ? key : ConfigurationPath.Combine(path, key)));
        }

        /// <summary>
        /// Returns a <see cref="IChangeToken"/> that can be used to observe when this configuration is reloaded.
        /// </summary>
        /// <returns></returns>
        public IChangeToken GetReloadToken() => _changeToken;

        /// <summary>
        /// Gets a configuration sub-section with the specified key.
        /// </summary>
        /// <param name="key">The key of the configuration section.</param>
        /// <returns>The <see cref="IConfigurationSection"/>.</returns>
        /// <remarks>
        ///     This method will never return <c>null</c>. If no matching sub-section is found with the specified key,
        ///     an empty <see cref="IConfigurationSection"/> will be returned.
        /// </remarks>
        public IConfigurationSection GetSection(string key) 
            => new ConfigurationSection(this, key);

        /// <summary>
        /// Force the configuration values to be reloaded from the underlying sources.
        /// </summary>
        public void Reload()
        {
            foreach (var provider in _providers)
            {
                provider.Load();
            }
            RaiseChanged();
        }

        private void RaiseChanged()
        {
            var previousToken = Interlocked.Exchange(ref _changeToken, new ConfigurationReloadToken());
            previousToken.OnReload();
        }
    }
}


================================================
FILE: src/Config/ConfigurationSection.cs
================================================
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System;
using System.Collections.Generic;
using Microsoft.Extensions.Primitives;

namespace Microsoft.Extensions.Configuration
{
    /// <summary>
    /// Represents a section of application configuration values.
    /// </summary>
    public class ConfigurationSection : IConfigurationSection
    {
        private readonly ConfigurationRoot _root;
        private readonly string _path;
        private string _key;

        /// <summary>
        /// Initializes a new instance.
        /// </summary>
        /// <param name="root">The configuration root.</param>
        /// <param name="path">The path to this section.</param>
        public ConfigurationSection(ConfigurationRoot root, string path)
        {
            if (root == null)
            {
                throw new ArgumentNullException(nameof(root));
            }

            if (path == null)
            {
                throw new ArgumentNullException(nameof(path));
            }

            _root = root;
            _path = path;
        }

        /// <summary>
        /// Gets the full path to this section from the <see cref="IConfigurationRoot"/>.
        /// </summary>
        public string Path => _path;

        /// <summary>
        /// Gets the key this section occupies in its parent.
        /// </summary>
        public string Key
        {
            get
            {
                if (_key == null)
                {
                    // Key is calculated lazily as last portion of Path
                    _key = ConfigurationPath.GetSectionKey(_path);
                }
                return _key;
            }
        }

        /// <summary>
        /// Gets or sets the section value.
        /// </summary>
        public string Value
        {
            get
            {
                return _root[Path];
            }
            set
            {
                _root[Path] = value;
            }
        }

        /// <summary>
        /// Gets or sets the value corresponding to a configuration key.
        /// </summary>
        /// <param name="key">The configuration key.</param>
        /// <returns>The configuration value.</returns>
        public string this[string key]
        {
            get
            {
                return _root[ConfigurationPath.Combine(Path, key)];
            }

            set
            {
                _root[ConfigurationPath.Combine(Path, key)] = value;
            }
        }

        /// <summary>
        /// Gets a configuration sub-section with the specified key.
        /// </summary>
        /// <param name="key">The key of the configuration section.</param>
        /// <returns>The <see cref="IConfigurationSection"/>.</returns>
        /// <remarks>
        ///     This method will never return <c>null</c>. If no matching sub-section is found with the specified key,
        ///     an empty <see cref="IConfigurationSection"/> will be returned.
        /// </remarks>
        public IConfigurationSection GetSection(string key) => _root.GetSection(ConfigurationPath.Combine(Path, key));

        /// <summary>
        /// Gets the immediate descendant configuration sub-sections.
        /// </summary>
        /// <returns>The configuration sub-sections.</returns>
        public IEnumerable<IConfigurationSection> GetChildren() => _root.GetChildrenImplementation(Path);

        /// <summary>
        /// Returns a <see cref="IChangeToken"/> that can be used to observe when this configuration is reloaded.
        /// </summary>
        /// <returns></returns>
        public IChangeToken GetReloadToken() => _root.GetReloadToken();
    }
}


================================================
FILE: src/Config/MemoryConfigurationBuilderExtensions.cs
================================================
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System;
using System.Collections.Generic;
using Microsoft.Extensions.Configuration.Memory;

namespace Microsoft.Extensions.Configuration
{
    /// <summary>
    /// IConfigurationBuilder extension methods for the MemoryConfigurationProvider.
    /// </summary>
    public static class MemoryConfigurationBuilderExtensions
    {
        /// <summary>
        /// Adds the memory configuration provider to <paramref name="configurationBuilder"/>.
        /// </summary>
        /// <param name="configurationBuilder">The <see cref="IConfigurationBuilder"/> to add to.</param>
        /// <returns>The <see cref="IConfigurationBuilder"/>.</returns>
        public static IConfigurationBuilder AddInMemoryCollection(this IConfigurationBuilder configurationBuilder)
        {
            if (configurationBuilder == null)
            {
                throw new ArgumentNullException(nameof(configurationBuilder));
            }

            configurationBuilder.Add(new MemoryConfigurationSource());
            return configurationBuilder;
        }

        /// <summary>
        /// Adds the memory configuration provider to <paramref name="configurationBuilder"/>.
        /// </summary>
        /// <param name="configurationBuilder">The <see cref="IConfigurationBuilder"/> to add to.</param>
        /// <param name="initialData">The data to add to memory configuration provider.</param>
        /// <returns>The <see cref="IConfigurationBuilder"/>.</returns>
        public static IConfigurationBuilder AddInMemoryCollection(
            this IConfigurationBuilder configurationBuilder,
            IEnumerable<KeyValuePair<string, string>> initialData)
        {
            if (configurationBuilder == null)
            {
                throw new ArgumentNullException(nameof(configurationBuilder));
            }

            configurationBuilder.Add(new MemoryConfigurationSource { InitialData = initialData });
            return configurationBuilder;
        }
    }
}

================================================
FILE: src/Config/MemoryConfigurationProvider.cs
================================================
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System;
using System.Collections;
using System.Collections.Generic;

namespace Microsoft.Extensions.Configuration.Memory
{
    /// <summary>
    /// In-memory implementation of <see cref="IConfigurationProvider"/>
    /// </summary>
    public class MemoryConfigurationProvider : ConfigurationProvider, IEnumerable<KeyValuePair<string, string>>
    {
        private readonly MemoryConfigurationSource _source;

        /// <summary>
        /// Initialize a new instance from the source.
        /// </summary>
        /// <param name="source">The source settings.</param>
        public MemoryConfigurationProvider(MemoryConfigurationSource source)
        {
            if (source == null)
            {
                throw new ArgumentNullException(nameof(source));
            }

            _source = source;

            if (_source.InitialData != null)
            {
                foreach (var pair in _source.InitialData)
                {
                    Data.Add(pair.Key, pair.Value);
                }
            }
        }

        /// <summary>
        /// Add a new key and value pair.
        /// </summary>
        /// <param name="key">The configuration key.</param>
        /// <param name="value">The configuration value.</param>
        public void Add(string key, string value)
        {
            Data.Add(key, value);
        }

        /// <summary>
        /// Returns an enumerator that iterates through the collection.
        /// </summary>
        /// <returns>An enumerator that can be used to iterate through the collection.</returns>
        public IEnumerator<KeyValuePair<string, string>> GetEnumerator()
        {
            return Data.GetEnumerator();
        }

        /// <summary>
        /// Returns an enumerator that iterates through the collection.
        /// </summary>
        /// <returns>An enumerator that can be used to iterate through the collection.</returns>
        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
    }
}


================================================
FILE: src/Config/MemoryConfigurationSource.cs
================================================
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System.Collections.Generic;

namespace Microsoft.Extensions.Configuration.Memory
{
    /// <summary>
    /// Represents in-memory data as an <see cref="IConfigurationSource"/>.
    /// </summary>
    public class MemoryConfigurationSource : IConfigurationSource
    {
        /// <summary>
        /// The initial key value configuration pairs.
        /// </summary>
        public IEnumerable<KeyValuePair<string, string>> InitialData { get; set; }

        /// <summary>
        /// Builds the <see cref="MemoryConfigurationProvider"/> for this source.
        /// </summary>
        /// <param name="builder">The <see cref="IConfigurationBuilder"/>.</param>
        /// <returns>A <see cref="MemoryConfigurationProvider"/></returns>
        public IConfigurationProvider Build(IConfigurationBuilder builder)
        {
            return new MemoryConfigurationProvider(this);
        }
    }
}


================================================
FILE: src/Config/Properties/AssemblyInfo.cs
================================================
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System.Runtime.CompilerServices;

[assembly: InternalsVisibleTo("Microsoft.Extensions.Configuration.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]



================================================
FILE: src/Config/Properties/Resources.Designer.cs
================================================
// <auto-generated />
namespace Microsoft.Extensions.Configuration
{
    using System.Globalization;
    using System.Reflection;
    using System.Resources;

    internal static class Resources
    {
        private static readonly ResourceManager _resourceManager
            = new ResourceManager("Microsoft.Extensions.Configuration.Resources", typeof(Resources).GetTypeInfo().Assembly);

        /// <summary>
        /// A configuration source is not registered. Please register one before setting a value.
        /// </summary>
        internal static string Error_NoSources
        {
            get => GetString("Error_NoSources");
        }

        /// <summary>
        /// A configuration source is not registered. Please register one before setting a value.
        /// </summary>
        internal static string FormatError_NoSources()
            => GetString("Error_NoSources");

        private static string GetString(string name, params string[] formatterNames)
        {
            var value = _resourceManager.GetString(name);

            System.Diagnostics.Debug.Assert(value != null);

            if (formatterNames != null)
            {
                for (var i = 0; i < formatterNames.Length; i++)
                {
                    value = value.Replace("{" + formatterNames[i] + "}", "{" + i + "}");
                }
            }

            return value;
        }
    }
}


================================================
FILE: src/Config/Resources.resx
================================================
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!-- 
    Microsoft ResX Schema 
    
    Version 2.0
    
    The primary goals of this format is to allow a simple XML format 
    that is mostly human readable. The generation and parsing of the 
    various data types are done through the TypeConverter classes 
    associated with the data types.
    
    Example:
    
    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        <value>[base64 mime encoded serialized .NET Framework object]</value>
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>
                
    There are any number of "resheader" rows that contain simple 
    name/value pairs.
    
    Each data row contains a name, and value. The row also contains a 
    type or mimetype. Type corresponds to a .NET class that support 
    text/value conversion through the TypeConverter architecture. 
    Classes that don't support this are serialized and stored with the 
    mimetype set.
    
    The mimetype is used for serialized objects, and tells the 
    ResXResourceReader how to depersist the object. This is currently not 
    extensible. For a given mimetype the value must be set accordingly:
    
    Note - application/x-microsoft.net.object.binary.base64 is the format 
    that the ResXResourceWriter will generate, however the reader can 
    read any of the formats listed below.
    
    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.

    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array 
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" use="required" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <data name="Error_NoSources" xml:space="preserve">
    <value>A configuration source is not registered. Please register one before setting a value.</value>
  </data>
</root>

================================================
FILE: src/Config/baseline.netcore.json
================================================
{
  "AssemblyIdentity": "Microsoft.Extensions.Configuration, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60",
  "Types": [
    {
      "Name": "Microsoft.Extensions.Configuration.ChainedBuilderExtensions",
      "Visibility": "Public",
      "Kind": "Class",
      "Abstract": true,
      "Static": true,
      "Sealed": true,
      "ImplementedInterfaces": [],
      "Members": [
        {
          "Kind": "Method",
          "Name": "AddConfiguration",
          "Parameters": [
            {
              "Name": "configurationBuilder",
              "Type": "Microsoft.Extensions.Configuration.IConfigurationBuilder"
            },
            {
              "Name": "config",
              "Type": "Microsoft.Extensions.Configuration.IConfiguration"
            }
          ],
          "ReturnType": "Microsoft.Extensions.Configuration.IConfigurationBuilder",
          "Static": true,
          "Extension": true,
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.Extensions.Configuration.ChainedConfigurationProvider",
      "Visibility": "Public",
      "Kind": "Class",
      "ImplementedInterfaces": [
        "Microsoft.Extensions.Configuration.IConfigurationProvider"
      ],
      "Members": [
        {
          "Kind": "Method",
          "Name": "TryGet",
          "Parameters": [
            {
              "Name": "key",
              "Type": "System.String"
            },
            {
              "Name": "value",
              "Type": "System.String",
              "Direction": "Out"
            }
          ],
          "ReturnType": "System.Boolean",
          "Sealed": true,
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Configuration.IConfigurationProvider",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "Set",
          "Parameters": [
            {
              "Name": "key",
              "Type": "System.String"
            },
            {
              "Name": "value",
              "Type": "System.String"
            }
          ],
          "ReturnType": "System.Void",
          "Sealed": true,
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Configuration.IConfigurationProvider",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "GetReloadToken",
          "Parameters": [],
          "ReturnType": "Microsoft.Extensions.Primitives.IChangeToken",
          "Sealed": true,
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Configuration.IConfigurationProvider",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "Load",
          "Parameters": [],
          "ReturnType": "System.Void",
          "Sealed": true,
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Configuration.IConfigurationProvider",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "GetChildKeys",
          "Parameters": [
            {
              "Name": "earlierKeys",
              "Type": "System.Collections.Generic.IEnumerable<System.String>"
            },
            {
              "Name": "parentPath",
              "Type": "System.String"
            }
          ],
          "ReturnType": "System.Collections.Generic.IEnumerable<System.String>",
          "Sealed": true,
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Configuration.IConfigurationProvider",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Constructor",
          "Name": ".ctor",
          "Parameters": [
            {
              "Name": "source",
              "Type": "Microsoft.Extensions.Configuration.ChainedConfigurationSource"
            }
          ],
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.Extensions.Configuration.ChainedConfigurationSource",
      "Visibility": "Public",
      "Kind": "Class",
      "ImplementedInterfaces": [
        "Microsoft.Extensions.Configuration.IConfigurationSource"
      ],
      "Members": [
        {
          "Kind": "Method",
          "Name": "get_Configuration",
          "Parameters": [],
          "ReturnType": "Microsoft.Extensions.Configuration.IConfiguration",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "set_Configuration",
          "Parameters": [
            {
              "Name": "value",
              "Type": "Microsoft.Extensions.Configuration.IConfiguration"
            }
          ],
          "ReturnType": "System.Void",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "Build",
          "Parameters": [
            {
              "Name": "builder",
              "Type": "Microsoft.Extensions.Configuration.IConfigurationBuilder"
            }
          ],
          "ReturnType": "Microsoft.Extensions.Configuration.IConfigurationProvider",
          "Sealed": true,
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Configuration.IConfigurationSource",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Constructor",
          "Name": ".ctor",
          "Parameters": [],
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.Extensions.Configuration.ConfigurationBuilder",
      "Visibility": "Public",
      "Kind": "Class",
      "ImplementedInterfaces": [
        "Microsoft.Extensions.Configuration.IConfigurationBuilder"
      ],
      "Members": [
        {
          "Kind": "Method",
          "Name": "get_Sources",
          "Parameters": [],
          "ReturnType": "System.Collections.Generic.IList<Microsoft.Extensions.Configuration.IConfigurationSource>",
          "Sealed": true,
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Configuration.IConfigurationBuilder",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "get_Properties",
          "Parameters": [],
          "ReturnType": "System.Collections.Generic.IDictionary<System.String, System.Object>",
          "Sealed": true,
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Configuration.IConfigurationBuilder",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "Add",
          "Parameters": [
            {
              "Name": "source",
              "Type": "Microsoft.Extensions.Configuration.IConfigurationSource"
            }
          ],
          "ReturnType": "Microsoft.Extensions.Configuration.IConfigurationBuilder",
          "Sealed": true,
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Configuration.IConfigurationBuilder",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "Build",
          "Parameters": [],
          "ReturnType": "Microsoft.Extensions.Configuration.IConfigurationRoot",
          "Sealed": true,
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Configuration.IConfigurationBuilder",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Constructor",
          "Name": ".ctor",
          "Parameters": [],
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.Extensions.Configuration.ConfigurationKeyComparer",
      "Visibility": "Public",
      "Kind": "Class",
      "ImplementedInterfaces": [
        "System.Collections.Generic.IComparer<System.String>"
      ],
      "Members": [
        {
          "Kind": "Method",
          "Name": "get_Instance",
          "Parameters": [],
          "ReturnType": "Microsoft.Extensions.Configuration.ConfigurationKeyComparer",
          "Static": true,
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "Compare",
          "Parameters": [
            {
              "Name": "x",
              "Type": "System.String"
            },
            {
              "Name": "y",
              "Type": "System.String"
            }
          ],
          "ReturnType": "System.Int32",
          "Sealed": true,
          "Virtual": true,
          "ImplementedInterface": "System.Collections.Generic.IComparer<System.String>",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Constructor",
          "Name": ".ctor",
          "Parameters": [],
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.Extensions.Configuration.ConfigurationProvider",
      "Visibility": "Public",
      "Kind": "Class",
      "Abstract": true,
      "ImplementedInterfaces": [
        "Microsoft.Extensions.Configuration.IConfigurationProvider"
      ],
      "Members": [
        {
          "Kind": "Method",
          "Name": "get_Data",
          "Parameters": [],
          "ReturnType": "System.Collections.Generic.IDictionary<System.String, System.String>",
          "Visibility": "Protected",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "set_Data",
          "Parameters": [
            {
              "Name": "value",
              "Type": "System.Collections.Generic.IDictionary<System.String, System.String>"
            }
          ],
          "ReturnType": "System.Void",
          "Visibility": "Protected",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "TryGet",
          "Parameters": [
            {
              "Name": "key",
              "Type": "System.String"
            },
            {
              "Name": "value",
              "Type": "System.String",
              "Direction": "Out"
            }
          ],
          "ReturnType": "System.Boolean",
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Configuration.IConfigurationProvider",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "Set",
          "Parameters": [
            {
              "Name": "key",
              "Type": "System.String"
            },
            {
              "Name": "value",
              "Type": "System.String"
            }
          ],
          "ReturnType": "System.Void",
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Configuration.IConfigurationProvider",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "Load",
          "Parameters": [],
          "ReturnType": "System.Void",
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Configuration.IConfigurationProvider",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "GetChildKeys",
          "Parameters": [
            {
              "Name": "earlierKeys",
              "Type": "System.Collections.Generic.IEnumerable<System.String>"
            },
            {
              "Name": "parentPath",
              "Type": "System.String"
            }
          ],
          "ReturnType": "System.Collections.Generic.IEnumerable<System.String>",
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Configuration.IConfigurationProvider",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "GetReloadToken",
          "Parameters": [],
          "ReturnType": "Microsoft.Extensions.Primitives.IChangeToken",
          "Sealed": true,
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Configuration.IConfigurationProvider",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "OnReload",
          "Parameters": [],
          "ReturnType": "System.Void",
          "Visibility": "Protected",
          "GenericParameter": []
        },
        {
          "Kind": "Constructor",
          "Name": ".ctor",
          "Parameters": [],
          "Visibility": "Protected",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.Extensions.Configuration.ConfigurationReloadToken",
      "Visibility": "Public",
      "Kind": "Class",
      "ImplementedInterfaces": [
        "Microsoft.Extensions.Primitives.IChangeToken"
      ],
      "Members": [
        {
          "Kind": "Method",
          "Name": "get_ActiveChangeCallbacks",
          "Parameters": [],
          "ReturnType": "System.Boolean",
          "Sealed": true,
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Primitives.IChangeToken",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "get_HasChanged",
          "Parameters": [],
          "ReturnType": "System.Boolean",
          "Sealed": true,
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Primitives.IChangeToken",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "RegisterChangeCallback",
          "Parameters": [
            {
              "Name": "callback",
              "Type": "System.Action<System.Object>"
            },
            {
              "Name": "state",
              "Type": "System.Object"
            }
          ],
          "ReturnType": "System.IDisposable",
          "Sealed": true,
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Primitives.IChangeToken",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "OnReload",
          "Parameters": [],
          "ReturnType": "System.Void",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Constructor",
          "Name": ".ctor",
          "Parameters": [],
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.Extensions.Configuration.ConfigurationRoot",
      "Visibility": "Public",
      "Kind": "Class",
      "ImplementedInterfaces": [
        "Microsoft.Extensions.Configuration.IConfigurationRoot"
      ],
      "Members": [
        {
          "Kind": "Method",
          "Name": "get_Item",
          "Parameters": [
            {
              "Name": "key",
              "Type": "System.String"
            }
          ],
          "ReturnType": "System.String",
          "Sealed": true,
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Configuration.IConfiguration",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "set_Item",
          "Parameters": [
            {
              "Name": "key",
              "Type": "System.String"
            },
            {
              "Name": "value",
              "Type": "System.String"
            }
          ],
          "ReturnType": "System.Void",
          "Sealed": true,
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Configuration.IConfiguration",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "GetSection",
          "Parameters": [
            {
              "Name": "key",
              "Type": "System.String"
            }
          ],
          "ReturnType": "Microsoft.Extensions.Configuration.IConfigurationSection",
          "Sealed": true,
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Configuration.IConfiguration",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "GetChildren",
          "Parameters": [],
          "ReturnType": "System.Collections.Generic.IEnumerable<Microsoft.Extensions.Configuration.IConfigurationSection>",
          "Sealed": true,
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Configuration.IConfiguration",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "GetReloadToken",
          "Parameters": [],
          "ReturnType": "Microsoft.Extensions.Primitives.IChangeToken",
          "Sealed": true,
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Configuration.IConfiguration",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "get_Providers",
          "Parameters": [],
          "ReturnType": "System.Collections.Generic.IEnumerable<Microsoft.Extensions.Configuration.IConfigurationProvider>",
          "Sealed": true,
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Configuration.IConfigurationRoot",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "Reload",
          "Parameters": [],
          "ReturnType": "System.Void",
          "Sealed": true,
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Configuration.IConfigurationRoot",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Constructor",
          "Name": ".ctor",
          "Parameters": [
            {
              "Name": "providers",
              "Type": "System.Collections.Generic.IList<Microsoft.Extensions.Configuration.IConfigurationProvider>"
            }
          ],
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.Extensions.Configuration.ConfigurationSection",
      "Visibility": "Public",
      "Kind": "Class",
      "ImplementedInterfaces": [
        "Microsoft.Extensions.Configuration.IConfigurationSection"
      ],
      "Members": [
        {
          "Kind": "Method",
          "Name": "get_Item",
          "Parameters": [
            {
              "Name": "key",
              "Type": "System.String"
            }
          ],
          "ReturnType": "System.String",
          "Sealed": true,
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Configuration.IConfiguration",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "set_Item",
          "Parameters": [
            {
              "Name": "key",
              "Type": "System.String"
            },
            {
              "Name": "value",
              "Type": "System.String"
            }
          ],
          "ReturnType": "System.Void",
          "Sealed": true,
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Configuration.IConfiguration",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "GetSection",
          "Parameters": [
            {
              "Name": "key",
              "Type": "System.String"
            }
          ],
          "ReturnType": "Microsoft.Extensions.Configuration.IConfigurationSection",
          "Sealed": true,
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Configuration.IConfiguration",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "GetChildren",
          "Parameters": [],
          "ReturnType": "System.Collections.Generic.IEnumerable<Microsoft.Extensions.Configuration.IConfigurationSection>",
          "Sealed": true,
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Configuration.IConfiguration",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "GetReloadToken",
          "Parameters": [],
          "ReturnType": "Microsoft.Extensions.Primitives.IChangeToken",
          "Sealed": true,
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Configuration.IConfiguration",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "get_Path",
          "Parameters": [],
          "ReturnType": "System.String",
          "Sealed": true,
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Configuration.IConfigurationSection",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "get_Key",
          "Parameters": [],
          "ReturnType": "System.String",
          "Sealed": true,
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Configuration.IConfigurationSection",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "get_Value",
          "Parameters": [],
          "ReturnType": "System.String",
          "Sealed": true,
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Configuration.IConfigurationSection",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "set_Value",
          "Parameters": [
            {
              "Name": "value",
              "Type": "System.String"
            }
          ],
          "ReturnType": "System.Void",
          "Sealed": true,
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Configuration.IConfigurationSection",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Constructor",
          "Name": ".ctor",
          "Parameters": [
            {
              "Name": "root",
              "Type": "Microsoft.Extensions.Configuration.ConfigurationRoot"
            },
            {
              "Name": "path",
              "Type": "System.String"
            }
          ],
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.Extensions.Configuration.MemoryConfigurationBuilderExtensions",
      "Visibility": "Public",
      "Kind": "Class",
      "Abstract": true,
      "Static": true,
      "Sealed": true,
      "ImplementedInterfaces": [],
      "Members": [
        {
          "Kind": "Method",
          "Name": "AddInMemoryCollection",
          "Parameters": [
            {
              "Name": "configurationBuilder",
              "Type": "Microsoft.Extensions.Configuration.IConfigurationBuilder"
            }
          ],
          "ReturnType": "Microsoft.Extensions.Configuration.IConfigurationBuilder",
          "Static": true,
          "Extension": true,
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "AddInMemoryCollection",
          "Parameters": [
            {
              "Name": "configurationBuilder",
              "Type": "Microsoft.Extensions.Configuration.IConfigurationBuilder"
            },
            {
              "Name": "initialData",
              "Type": "System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<System.String, System.String>>"
            }
          ],
          "ReturnType": "Microsoft.Extensions.Configuration.IConfigurationBuilder",
          "Static": true,
          "Extension": true,
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.Extensions.Configuration.Memory.MemoryConfigurationProvider",
      "Visibility": "Public",
      "Kind": "Class",
      "BaseType": "Microsoft.Extensions.Configuration.ConfigurationProvider",
      "ImplementedInterfaces": [
        "System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<System.String, System.String>>"
      ],
      "Members": [
        {
          "Kind": "Method",
          "Name": "Add",
          "Parameters": [
            {
              "Name": "key",
              "Type": "System.String"
            },
            {
              "Name": "value",
              "Type": "System.String"
            }
          ],
          "ReturnType": "System.Void",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "GetEnumerator",
          "Parameters": [],
          "ReturnType": "System.Collections.Generic.IEnumerator<System.Collections.Generic.KeyValuePair<System.String, System.String>>",
          "Sealed": true,
          "Virtual": true,
          "ImplementedInterface": "System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<System.String, System.String>>",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Constructor",
          "Name": ".ctor",
          "Parameters": [
            {
              "Name": "source",
              "Type": "Microsoft.Extensions.Configuration.Memory.MemoryConfigurationSource"
            }
          ],
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.Extensions.Configuration.Memory.MemoryConfigurationSource",
      "Visibility": "Public",
      "Kind": "Class",
      "ImplementedInterfaces": [
        "Microsoft.Extensions.Configuration.IConfigurationSource"
      ],
      "Members": [
        {
          "Kind": "Method",
          "Name": "get_InitialData",
          "Parameters": [],
          "ReturnType": "System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<System.String, System.String>>",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "set_InitialData",
          "Parameters": [
            {
              "Name": "value",
              "Type": "System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<System.String, System.String>>"
            }
          ],
          "ReturnType": "System.Void",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "Build",
          "Parameters": [
            {
              "Name": "builder",
              "Type": "Microsoft.Extensions.Configuration.IConfigurationBuilder"
            }
          ],
          "ReturnType": "Microsoft.Extensions.Configuration.IConfigurationProvider",
          "Sealed": true,
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Configuration.IConfigurationSource",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Constructor",
          "Name": ".ctor",
          "Parameters": [],
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    }
  ]
}

================================================
FILE: src/Config.Abstractions/Config.Abstractions.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <AssemblyName>Microsoft.Extensions.Configuration.Abstractions</AssemblyName>
    <RootNamespace>Microsoft.Extensions.Configuration.Abstractions</RootNamespace>
    <Description>Abstractions of key-value pair based configuration.
Commonly used types:
Microsoft.Extensions.Configuration.IConfiguration
Microsoft.Extensions.Configuration.IConfigurationBuilder
Microsoft.Extensions.Configuration.IConfigurationProvider
Microsoft.Extensions.Configuration.IConfigurationRoot
Microsoft.Extensions.Configuration.IConfigurationSection</Description>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Extensions.Primitives" Version="$(MicrosoftExtensionsPrimitivesPackageVersion)" />
  </ItemGroup>

</Project>


================================================
FILE: src/Config.Abstractions/ConfigurationExtensions.cs
================================================
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System;
using System.Collections.Generic;
using System.Linq;

namespace Microsoft.Extensions.Configuration
{
    /// <summary>
    /// Extension methods for configuration classes./>.
    /// </summary>
    public static class ConfigurationExtensions
    {
        /// <summary>
        /// Adds a new configuration source.
        /// </summary>
        /// <param name="builder">The <see cref="IConfigurationBuilder"/> to add to.</param>
        /// <param name="configureSource">Configures the source secrets.</param>
        /// <returns>The <see cref="IConfigurationBuilder"/>.</returns>
        public static IConfigurationBuilder Add<TSource>(this IConfigurationBuilder builder, Action<TSource> configureSource) where TSource : IConfigurationSource, new()
        {
            var source = new TSource();
            configureSource?.Invoke(source);
            return builder.Add(source);
        }

        /// <summary>
        /// Shorthand for GetSection("ConnectionStrings")[name].
        /// </summary>
        /// <param name="configuration">The configuration.</param>
        /// <param name="name">The connection string key.</param>
        /// <returns></returns>
        public static string GetConnectionString(this IConfiguration configuration, string name)
        {
            return configuration?.GetSection("ConnectionStrings")?[name];
        }

        /// <summary>
        /// Get the enumeration of key value pairs within the <see cref="IConfiguration" />
        /// </summary>
        /// <param name="configuration">The <see cref="IConfiguration"/> to enumerate.</param>
        /// <returns>An enumeration of key value pairs.</returns>
        public static IEnumerable<KeyValuePair<string, string>> AsEnumerable(this IConfiguration configuration) => configuration.AsEnumerable(makePathsRelative: false);

        /// <summary>
        /// Get the enumeration of key value pairs within the <see cref="IConfiguration" />
        /// </summary>
        /// <param name="configuration">The <see cref="IConfiguration"/> to enumerate.</param>
        /// <param name="makePathsRelative">If true, the child keys returned will have the current configuration's Path trimmed from the front.</param>
        /// <returns>An enumeration of key value pairs.</returns>
        public static IEnumerable<KeyValuePair<string, string>> AsEnumerable(this IConfiguration configuration, bool makePathsRelative)
        {
            var stack = new Stack<IConfiguration>();
            stack.Push(configuration);
            var rootSection = configuration as IConfigurationSection;
            var prefixLength = (makePathsRelative && rootSection != null) ? rootSection.Path.Length + 1 : 0;
            while (stack.Count > 0)
            {
                var config = stack.Pop();
                // Don't include the sections value if we are removing paths, since it will be an empty key
                if (config is IConfigurationSection section && (!makePathsRelative || config != configuration))
                {
                    yield return new KeyValuePair<string, string>(section.Path.Substring(prefixLength), section.Value);
                }
                foreach (var child in config.GetChildren())
                {
                    stack.Push(child);
                }
            }
        }

        /// <summary>
        /// Determines whether the section has a <see cref="IConfigurationSection.Value"/> or has children 
        /// </summary>
        public static bool Exists(this IConfigurationSection section)
        {
            if (section == null)
            {
                return false;
            }
            return section.Value != null || section.GetChildren().Any();
        }
    }
}

================================================
FILE: src/Config.Abstractions/ConfigurationPath.cs
================================================
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System;
using System.Collections.Generic;

namespace Microsoft.Extensions.Configuration
{
    /// <summary>
    /// Utility methods and constants for manipulating Configuration paths
    /// </summary>
    public static class ConfigurationPath
    {
        /// <summary>
        /// The delimiter ":" used to separate individual keys in a path.
        /// </summary>
        public static readonly string KeyDelimiter = ":";

        /// <summary>
        /// Combines path segments into one path.
        /// </summary>
        /// <param name="pathSegments">The path segments to combine.</param>
        /// <returns>The combined path.</returns>
        public static string Combine(params string[] pathSegments)
        {
            if (pathSegments == null)
            {
                throw new ArgumentNullException(nameof(pathSegments));
            }
            return string.Join(KeyDelimiter, pathSegments);
        }

        /// <summary>
        /// Combines path segments into one path.
        /// </summary>
        /// <param name="pathSegments">The path segments to combine.</param>
        /// <returns>The combined path.</returns>
        public static string Combine(IEnumerable<string> pathSegments)
        {
            if (pathSegments == null)
            {
                throw new ArgumentNullException(nameof(pathSegments));
            }
            return string.Join(KeyDelimiter, pathSegments);
        }

        /// <summary>
        /// Extracts the last path segment from the path.
        /// </summary>
        /// <param name="path">The path.</param>
        /// <returns>The last path segment of the path.</returns>
        public static string GetSectionKey(string path)
        {
            if (string.IsNullOrEmpty(path))
            {
                return path;
            }

            var lastDelimiterIndex = path.LastIndexOf(KeyDelimiter, StringComparison.OrdinalIgnoreCase);
            return lastDelimiterIndex == -1 ? path : path.Substring(lastDelimiterIndex + 1);
        }

        /// <summary>
        /// Extracts the path corresponding to the parent node for a given path.
        /// </summary>
        /// <param name="path">The path.</param>
        /// <returns>The original path minus the last individual segment found in it. Null if the original path corresponds to a top level node.</returns>
        public static string GetParentPath(string path)
        {
            if (string.IsNullOrEmpty(path))
            {
                return null;
            }

            var lastDelimiterIndex = path.LastIndexOf(KeyDelimiter, StringComparison.OrdinalIgnoreCase);
            return lastDelimiterIndex == -1 ? null : path.Substring(0, lastDelimiterIndex);
        }
    }
}


================================================
FILE: src/Config.Abstractions/IConfiguration.cs
================================================
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System.Collections.Generic;
using Microsoft.Extensions.Primitives;

namespace Microsoft.Extensions.Configuration
{
    /// <summary>
    /// Represents a set of key/value application configuration properties.
    /// </summary>
    public interface IConfiguration
    {
        /// <summary>
        /// Gets or sets a configuration value.
        /// </summary>
        /// <param name="key">The configuration key.</param>
        /// <returns>The configuration value.</returns>
        string this[string key] { get; set; }

        /// <summary>
        /// Gets a configuration sub-section with the specified key.
        /// </summary>
        /// <param name="key">The key of the configuration section.</param>
        /// <returns>The <see cref="IConfigurationSection"/>.</returns>
        /// <remarks>
        ///     This method will never return <c>null</c>. If no matching sub-section is found with the specified key,
        ///     an empty <see cref="IConfigurationSection"/> will be returned.
        /// </remarks>
        IConfigurationSection GetSection(string key);

        /// <summary>
        /// Gets the immediate descendant configuration sub-sections.
        /// </summary>
        /// <returns>The configuration sub-sections.</returns>
        IEnumerable<IConfigurationSection> GetChildren();

        /// <summary>
        /// Returns a <see cref="IChangeToken"/> that can be used to observe when this configuration is reloaded.
        /// </summary>
        /// <returns>A <see cref="IChangeToken"/>.</returns>
        IChangeToken GetReloadToken();
    }
}


================================================
FILE: src/Config.Abstractions/IConfigurationBuilder.cs
================================================
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System.Collections.Generic;

namespace Microsoft.Extensions.Configuration
{
    /// <summary>
    /// Represents a type used to build application configuration.
    /// </summary>
    public interface IConfigurationBuilder
    {
        /// <summary>
        /// Gets a key/value collection that can be used to share data between the <see cref="IConfigurationBuilder"/>
        /// and the registered <see cref="IConfigurationSource"/>s.
        /// </summary>
        IDictionary<string, object> Properties { get; }

        /// <summary>
        /// Gets the sources used to obtain configuration values
        /// </summary>
        IList<IConfigurationSource> Sources { get; }

        /// <summary>
        /// Adds a new configuration source.
        /// </summary>
        /// <param name="source">The configuration source to add.</param>
        /// <returns>The same <see cref="IConfigurationBuilder"/>.</returns>
        IConfigurationBuilder Add(IConfigurationSource source);

        /// <summary>
        /// Builds an <see cref="IConfiguration"/> with keys and values from the set of sources registered in
        /// <see cref="Sources"/>.
        /// </summary>
        /// <returns>An <see cref="IConfigurationRoot"/> with keys and values from the registered sources.</returns>
        IConfigurationRoot Build();
    }
}


================================================
FILE: src/Config.Abstractions/IConfigurationProvider.cs
================================================
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System.Collections.Generic;
using Microsoft.Extensions.Primitives;

namespace Microsoft.Extensions.Configuration
{
    /// <summary>
    /// Provides configuration key/values for an application.
    /// </summary>
    public interface IConfigurationProvider
    {
        /// <summary>
        /// Tries to get a configuration value for the specified key.
        /// </summary>
        /// <param name="key">The key.</param>
        /// <param name="value">The value.</param>
        /// <returns><c>True</c> if a value for the specified key was found, otherwise <c>false</c>.</returns>
        bool TryGet(string key, out string value);

        /// <summary>
        /// Sets a configuration value for the specified key.
        /// </summary>
        /// <param name="key">The key.</param>
        /// <param name="value">The value.</param>
        void Set(string key, string value);

        /// <summary>
        /// Returns a change token if this provider supports change tracking, null otherwise.
        /// </summary>
        /// <returns></returns>
        IChangeToken GetReloadToken();

        /// <summary>
        /// Loads configuration values from the source represented by this <see cref="IConfigurationProvider"/>.
        /// </summary>
        void Load();

        /// <summary>
        /// Returns the immediate descendant configuration keys for a given parent path based on this
        /// <see cref="IConfigurationProvider"/>'s data and the set of keys returned by all the preceding
        /// <see cref="IConfigurationProvider"/>s.
        /// </summary>
        /// <param name="earlierKeys">The child keys returned by the preceding providers for the same parent path.</param>
        /// <param name="parentPath">The parent path.</param>
        /// <returns>The child keys.</returns>
        IEnumerable<string> GetChildKeys(IEnumerable<string> earlierKeys, string parentPath);
    }
}

================================================
FILE: src/Config.Abstractions/IConfigurationRoot.cs
================================================
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System;
using System.Collections.Generic;

namespace Microsoft.Extensions.Configuration
{
    /// <summary>
    /// Represents the root of an <see cref="IConfiguration"/> hierarchy.
    /// </summary>
    public interface IConfigurationRoot : IConfiguration
    {
        /// <summary>
        /// Force the configuration values to be reloaded from the underlying <see cref="IConfigurationProvider"/>s.
        /// </summary>
        void Reload();

        /// <summary>
        /// The <see cref="IConfigurationProvider"/>s for this configuration.
        /// </summary>
        IEnumerable<IConfigurationProvider> Providers { get; }
    }
}


================================================
FILE: src/Config.Abstractions/IConfigurationSection.cs
================================================
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

namespace Microsoft.Extensions.Configuration
{
    /// <summary>
    /// Represents a section of application configuration values.
    /// </summary>
    public interface IConfigurationSection : IConfiguration
    {
        /// <summary>
        /// Gets the key this section occupies in its parent.
        /// </summary>
        string Key { get; }

        /// <summary>
        /// Gets the full path to this section within the <see cref="IConfiguration"/>.
        /// </summary>
        string Path { get; }

        /// <summary>
        /// Gets or sets the section value.
        /// </summary>
        string Value { get; set; }
    }
}


================================================
FILE: src/Config.Abstractions/IConfigurationSource.cs
================================================
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System.Collections.Generic;

namespace Microsoft.Extensions.Configuration
{
    /// <summary>
    /// Represents a source of configuration key/values for an application.
    /// </summary>
    public interface IConfigurationSource
    {
        /// <summary>
        /// Builds the <see cref="IConfigurationProvider"/> for this source.
        /// </summary>
        /// <param name="builder">The <see cref="IConfigurationBuilder"/>.</param>
        /// <returns>An <see cref="IConfigurationProvider"/></returns>
        IConfigurationProvider Build(IConfigurationBuilder builder);
    }
}

================================================
FILE: src/Config.Abstractions/baseline.netcore.json
================================================
{
  "AssemblyIdentity": "Microsoft.Extensions.Configuration.Abstractions, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60",
  "Types": [
    {
      "Name": "Microsoft.Extensions.Configuration.ConfigurationExtensions",
      "Visibility": "Public",
      "Kind": "Class",
      "Abstract": true,
      "Static": true,
      "Sealed": true,
      "ImplementedInterfaces": [],
      "Members": [
        {
          "Kind": "Method",
          "Name": "Add<T0>",
          "Parameters": [
            {
              "Name": "builder",
              "Type": "Microsoft.Extensions.Configuration.IConfigurationBuilder"
            },
            {
              "Name": "configureSource",
              "Type": "System.Action<T0>"
            }
          ],
          "ReturnType": "Microsoft.Extensions.Configuration.IConfigurationBuilder",
          "Static": true,
          "Extension": true,
          "Visibility": "Public",
          "GenericParameter": [
            {
              "ParameterName": "TSource",
              "ParameterPosition": 0,
              "New": true,
              "BaseTypeOrInterfaces": [
                "Microsoft.Extensions.Configuration.IConfigurationSource"
              ]
            }
          ]
        },
        {
          "Kind": "Method",
          "Name": "GetConnectionString",
          "Parameters": [
            {
              "Name": "configuration",
              "Type": "Microsoft.Extensions.Configuration.IConfiguration"
            },
            {
              "Name": "name",
              "Type": "System.String"
            }
          ],
          "ReturnType": "System.String",
          "Static": true,
          "Extension": true,
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "AsEnumerable",
          "Parameters": [
            {
              "Name": "configuration",
              "Type": "Microsoft.Extensions.Configuration.IConfiguration"
            }
          ],
          "ReturnType": "System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<System.String, System.String>>",
          "Static": true,
          "Extension": true,
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "AsEnumerable",
          "Parameters": [
            {
              "Name": "configuration",
              "Type": "Microsoft.Extensions.Configuration.IConfiguration"
            },
            {
              "Name": "makePathsRelative",
              "Type": "System.Boolean"
            }
          ],
          "ReturnType": "System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<System.String, System.String>>",
          "Static": true,
          "Extension": true,
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "Exists",
          "Parameters": [
            {
              "Name": "section",
              "Type": "Microsoft.Extensions.Configuration.IConfigurationSection"
            }
          ],
          "ReturnType": "System.Boolean",
          "Static": true,
          "Extension": true,
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.Extensions.Configuration.ConfigurationPath",
      "Visibility": "Public",
      "Kind": "Class",
      "Abstract": true,
      "Static": true,
      "Sealed": true,
      "ImplementedInterfaces": [],
      "Members": [
        {
          "Kind": "Method",
          "Name": "Combine",
          "Parameters": [
            {
              "Name": "pathSegments",
              "Type": "System.String[]",
              "IsParams": true
            }
          ],
          "ReturnType": "System.String",
          "Static": true,
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "Combine",
          "Parameters": [
            {
              "Name": "pathSegments",
              "Type": "System.Collections.Generic.IEnumerable<System.String>"
            }
          ],
          "ReturnType": "System.String",
          "Static": true,
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "GetSectionKey",
          "Parameters": [
            {
              "Name": "path",
              "Type": "System.String"
            }
          ],
          "ReturnType": "System.String",
          "Static": true,
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "GetParentPath",
          "Parameters": [
            {
              "Name": "path",
              "Type": "System.String"
            }
          ],
          "ReturnType": "System.String",
          "Static": true,
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Field",
          "Name": "KeyDelimiter",
          "Parameters": [],
          "ReturnType": "System.String",
          "Static": true,
          "ReadOnly": true,
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.Extensions.Configuration.IConfiguration",
      "Visibility": "Public",
      "Kind": "Interface",
      "Abstract": true,
      "ImplementedInterfaces": [],
      "Members": [
        {
          "Kind": "Method",
          "Name": "get_Item",
          "Parameters": [
            {
              "Name": "key",
              "Type": "System.String"
            }
          ],
          "ReturnType": "System.String",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "set_Item",
          "Parameters": [
            {
              "Name": "key",
              "Type": "System.String"
            },
            {
              "Name": "value",
              "Type": "System.String"
            }
          ],
          "ReturnType": "System.Void",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "GetSection",
          "Parameters": [
            {
              "Name": "key",
              "Type": "System.String"
            }
          ],
          "ReturnType": "Microsoft.Extensions.Configuration.IConfigurationSection",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "GetChildren",
          "Parameters": [],
          "ReturnType": "System.Collections.Generic.IEnumerable<Microsoft.Extensions.Configuration.IConfigurationSection>",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "GetReloadToken",
          "Parameters": [],
          "ReturnType": "Microsoft.Extensions.Primitives.IChangeToken",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.Extensions.Configuration.IConfigurationBuilder",
      "Visibility": "Public",
      "Kind": "Interface",
      "Abstract": true,
      "ImplementedInterfaces": [],
      "Members": [
        {
          "Kind": "Method",
          "Name": "get_Properties",
          "Parameters": [],
          "ReturnType": "System.Collections.Generic.IDictionary<System.String, System.Object>",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "get_Sources",
          "Parameters": [],
          "ReturnType": "System.Collections.Generic.IList<Microsoft.Extensions.Configuration.IConfigurationSource>",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "Add",
          "Parameters": [
            {
              "Name": "source",
              "Type": "Microsoft.Extensions.Configuration.IConfigurationSource"
            }
          ],
          "ReturnType": "Microsoft.Extensions.Configuration.IConfigurationBuilder",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "Build",
          "Parameters": [],
          "ReturnType": "Microsoft.Extensions.Configuration.IConfigurationRoot",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.Extensions.Configuration.IConfigurationProvider",
      "Visibility": "Public",
      "Kind": "Interface",
      "Abstract": true,
      "ImplementedInterfaces": [],
      "Members": [
        {
          "Kind": "Method",
          "Name": "TryGet",
          "Parameters": [
            {
              "Name": "key",
              "Type": "System.String"
            },
            {
              "Name": "value",
              "Type": "System.String",
              "Direction": "Out"
            }
          ],
          "ReturnType": "System.Boolean",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "Set",
          "Parameters": [
            {
              "Name": "key",
              "Type": "System.String"
            },
            {
              "Name": "value",
              "Type": "System.String"
            }
          ],
          "ReturnType": "System.Void",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "GetReloadToken",
          "Parameters": [],
          "ReturnType": "Microsoft.Extensions.Primitives.IChangeToken",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "Load",
          "Parameters": [],
          "ReturnType": "System.Void",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "GetChildKeys",
          "Parameters": [
            {
              "Name": "earlierKeys",
              "Type": "System.Collections.Generic.IEnumerable<System.String>"
            },
            {
              "Name": "parentPath",
              "Type": "System.String"
            }
          ],
          "ReturnType": "System.Collections.Generic.IEnumerable<System.String>",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.Extensions.Configuration.IConfigurationRoot",
      "Visibility": "Public",
      "Kind": "Interface",
      "Abstract": true,
      "ImplementedInterfaces": [
        "Microsoft.Extensions.Configuration.IConfiguration"
      ],
      "Members": [
        {
          "Kind": "Method",
          "Name": "Reload",
          "Parameters": [],
          "ReturnType": "System.Void",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "get_Providers",
          "Parameters": [],
          "ReturnType": "System.Collections.Generic.IEnumerable<Microsoft.Extensions.Configuration.IConfigurationProvider>",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.Extensions.Configuration.IConfigurationSection",
      "Visibility": "Public",
      "Kind": "Interface",
      "Abstract": true,
      "ImplementedInterfaces": [
        "Microsoft.Extensions.Configuration.IConfiguration"
      ],
      "Members": [
        {
          "Kind": "Method",
          "Name": "get_Key",
          "Parameters": [],
          "ReturnType": "System.String",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "get_Path",
          "Parameters": [],
          "ReturnType": "System.String",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "get_Value",
          "Parameters": [],
          "ReturnType": "System.String",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "set_Value",
          "Parameters": [
            {
              "Name": "value",
              "Type": "System.String"
            }
          ],
          "ReturnType": "System.Void",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.Extensions.Configuration.IConfigurationSource",
      "Visibility": "Public",
      "Kind": "Interface",
      "Abstract": true,
      "ImplementedInterfaces": [],
      "Members": [
        {
          "Kind": "Method",
          "Name": "Build",
          "Parameters": [
            {
              "Name": "builder",
              "Type": "Microsoft.Extensions.Configuration.IConfigurationBuilder"
            }
          ],
          "ReturnType": "Microsoft.Extensions.Configuration.IConfigurationProvider",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    }
  ]
}

================================================
FILE: src/Config.AzureKeyVault/AzureKeyVaultConfigurationExtensions.cs
================================================
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System;
using System.Security.Cryptography.X509Certificates;
using System.Threading.Tasks;
using Microsoft.Azure.KeyVault;
using Microsoft.Azure.Services.AppAuthentication;
using Microsoft.Extensions.Configuration.AzureKeyVault;
using Microsoft.IdentityModel.Clients.ActiveDirectory;

namespace Microsoft.Extensions.Configuration
{
    /// <summary>
    /// Extension methods for registering <see cref="AzureKeyVaultConfigurationProvider"/> with <see cref="IConfigurationBuilder"/>.
    /// </summary>
    public static class AzureKeyVaultConfigurationExtensions
    {
        /// <summary>
        /// Adds an <see cref="IConfigurationProvider"/> that reads configuration values from the Azure KeyVault.
        /// </summary>
        /// <param name="configurationBuilder">The <see cref="IConfigurationBuilder"/> to add to.</param>
        /// <param name="vault">The Azure KeyVault uri.</param>
        /// <param name="clientId">The application client id.</param>
        /// <param name="clientSecret">The client secret to use for authentication.</param>
        /// <returns>The <see cref="IConfigurationBuilder"/>.</returns>
        public static IConfigurationBuilder AddAzureKeyVault(
            this IConfigurationBuilder configurationBuilder,
            string vault,
            string clientId,
            string clientSecret)
        {
            return AddAzureKeyVault(configurationBuilder, vault, clientId, clientSecret, new DefaultKeyVaultSecretManager());
        }

        /// <summary>
        /// Adds an <see cref="IConfigurationProvider"/> that reads configuration values from the Azure KeyVault.
        /// </summary>
        /// <param name="configurationBuilder">The <see cref="IConfigurationBuilder"/> to add to.</param>
        /// <param name="vault">The Azure KeyVault uri.</param>
        /// <param name="clientId">The application client id.</param>
        /// <param name="clientSecret">The client secret to use for authentication.</param>
        /// <param name="manager">The <see cref="IKeyVaultSecretManager"/> instance used to control secret loading.</param>
        /// <returns>The <see cref="IConfigurationBuilder"/>.</returns>
        public static IConfigurationBuilder AddAzureKeyVault(
            this IConfigurationBuilder configurationBuilder,
            string vault,
            string clientId,
            string clientSecret,
            IKeyVaultSecretManager manager)
        {
            if (clientId == null)
            {
                throw new ArgumentNullException(nameof(clientId));
            }
            if (clientSecret == null)
            {
                throw new ArgumentNullException(nameof(clientSecret));
            }
            KeyVaultClient.AuthenticationCallback callback =
                (authority, resource, scope) => GetTokenFromClientSecret(authority, resource, clientId, clientSecret);

            return configurationBuilder.AddAzureKeyVault(vault, new KeyVaultClient(callback), manager);
        }

        private static async Task<string> GetTokenFromClientSecret(string authority, string resource, string clientId, string clientSecret)
        {
            var authContext = new AuthenticationContext(authority);
            var clientCred = new ClientCredential(clientId, clientSecret);
            var result = await authContext.AcquireTokenAsync(resource, clientCred);
            return result.AccessToken;
        }

        /// <summary>
        /// Adds an <see cref="IConfigurationProvider"/> that reads configuration values from the Azure KeyVault.
        /// </summary>
        /// <param name="configurationBuilder">The <see cref="IConfigurationBuilder"/> to add to.</param>
        /// <param name="vault">Azure KeyVault uri.</param>
        /// <param name="clientId">The application client id.</param>
        /// <param name="certificate">The <see cref="X509Certificate2"/> to use for authentication.</param>
        /// <returns>The <see cref="IConfigurationBuilder"/>.</returns>
        public static IConfigurationBuilder AddAzureKeyVault(
            this IConfigurationBuilder configurationBuilder,
            string vault,
            string clientId,
            X509Certificate2 certificate)
        {
            return AddAzureKeyVault(configurationBuilder, vault, clientId, certificate, new DefaultKeyVaultSecretManager());
        }

        /// <summary>
        /// Adds an <see cref="IConfigurationProvider"/> that reads configuration values from the Azure KeyVault.
        /// </summary>
        /// <param name="configurationBuilder">The <see cref="IConfigurationBuilder"/> to add to.</param>
        /// <param name="vault">Azure KeyVault uri.</param>
        /// <param name="clientId">The application client id.</param>
        /// <param name="certificate">The <see cref="X509Certificate2"/> to use for authentication.</param>
        /// <param name="manager">The <see cref="IKeyVaultSecretManager"/> instance used to control secret loading.</param>
        /// <returns>The <see cref="IConfigurationBuilder"/>.</returns>
        public static IConfigurationBuilder AddAzureKeyVault(
            this IConfigurationBuilder configurationBuilder,
            string vault,
            string clientId,
            X509Certificate2 certificate,
            IKeyVaultSecretManager manager)
        {
            if (clientId == null)
            {
                throw new ArgumentNullException(nameof(clientId));
            }
            if (certificate == null)
            {
                throw new ArgumentNullException(nameof(certificate));
            }
            KeyVaultClient.AuthenticationCallback callback =
                (authority, resource, scope) => GetTokenFromClientCertificate(authority, resource, clientId, certificate);

            return configurationBuilder.AddAzureKeyVault(vault, new KeyVaultClient(callback), manager);
        }

        private static async Task<string> GetTokenFromClientCertificate(string authority, string resource, string clientId, X509Certificate2 certificate)
        {
            var authContext = new AuthenticationContext(authority);
            var result = await authContext.AcquireTokenAsync(resource, new ClientAssertionCertificate(clientId, certificate));
            return result.AccessToken;
        }

        /// <summary>
        /// Adds an <see cref="IConfigurationProvider"/> that reads configuration values from the Azure KeyVault.
        /// </summary>
        /// <param name="configurationBuilder">The <see cref="IConfigurationBuilder"/> to add to.</param>
        /// <param name="vault">Azure KeyVault uri.</param>
        /// <returns>The <see cref="IConfigurationBuilder"/>.</returns>
        public static IConfigurationBuilder AddAzureKeyVault(
            this IConfigurationBuilder configurationBuilder,
            string vault)
        {
            return AddAzureKeyVault(configurationBuilder, vault, new DefaultKeyVaultSecretManager());
        }

        /// <summary>
        /// Adds an <see cref="IConfigurationProvider"/> that reads configuration values from the Azure KeyVault.
        /// </summary>
        /// <param name="configurationBuilder">The <see cref="IConfigurationBuilder"/> to add to.</param>
        /// <param name="vault">Azure KeyVault uri.</param>
        /// <param name="manager">The <see cref="IKeyVaultSecretManager"/> instance used to control secret loading.</param>
        /// <returns>The <see cref="IConfigurationBuilder"/>.</returns>
        public static IConfigurationBuilder AddAzureKeyVault(
            this IConfigurationBuilder configurationBuilder,
            string vault,
            IKeyVaultSecretManager manager)
        {
            var azureServiceTokenProvider = new AzureServiceTokenProvider();
            var authenticationCallback = new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback);
            var keyVaultClient = new KeyVaultClient(authenticationCallback);
            
            return AddAzureKeyVault(configurationBuilder, vault, keyVaultClient, manager);
        }

        /// <summary>
        /// Adds an <see cref="IConfigurationProvider"/> that reads configuration values from the Azure KeyVault.
        /// </summary>
        /// <param name="configurationBuilder">The <see cref="IConfigurationBuilder"/> to add to.</param>
        /// <param name="vault">Azure KeyVault uri.</param>
        /// <param name="client">The <see cref="KeyVaultClient"/> to use for retrieving values.</param>
        /// <param name="manager">The <see cref="IKeyVaultSecretManager"/> instance used to control secret loading.</param>
        /// <returns>The <see cref="IConfigurationBuilder"/>.</returns>
        public static IConfigurationBuilder AddAzureKeyVault(
            this IConfigurationBuilder configurationBuilder,
            string vault,
            KeyVaultClient client,
            IKeyVaultSecretManager manager)
        {
            if (configurationBuilder == null)
            {
                throw new ArgumentNullException(nameof(configurationBuilder));
            }
            if (client == null)
            {
                throw new ArgumentNullException(nameof(client));
            }
            if (vault == null)
            {
                throw new ArgumentNullException(nameof(vault));
            }
            if (manager == null)
            {
                throw new ArgumentNullException(nameof(manager));
            }

            configurationBuilder.Add(new AzureKeyVaultConfigurationSource()
            {
                Client = client,
                Vault = vault,
                Manager = manager
            });

            return configurationBuilder;
        }
    }
}


================================================
FILE: src/Config.AzureKeyVault/AzureKeyVaultConfigurationProvider.cs
================================================
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.Azure.KeyVault;

namespace Microsoft.Extensions.Configuration.AzureKeyVault
{
    /// <summary>
    /// An AzureKeyVault based <see cref="ConfigurationProvider"/>.
    /// </summary>
    internal class AzureKeyVaultConfigurationProvider : ConfigurationProvider
    {
        private readonly IKeyVaultClient _client;
        private readonly string _vault;
        private readonly IKeyVaultSecretManager _manager;

        /// <summary>
        /// Creates a new instance of <see cref="AzureKeyVaultConfigurationProvider"/>.
        /// </summary>
        /// <param name="client">The <see cref="KeyVaultClient"/> to use for retrieving values.</param>
        /// <param name="vault">Azure KeyVault uri.</param>
        /// <param name="manager"></param>
        public AzureKeyVaultConfigurationProvider(IKeyVaultClient client, string vault, IKeyVaultSecretManager manager)
        {
            if (client == null)
            {
                throw new ArgumentNullException(nameof(client));
            }
            if (vault == null)
            {
                throw new ArgumentNullException(nameof(vault));
            }
            if (manager == null)
            {
                throw new ArgumentNullException(nameof(manager));
            }

            _client = client;
            _vault = vault;
            _manager = manager;
        }

        public override void Load() => LoadAsync().ConfigureAwait(false).GetAwaiter().GetResult();

        private async Task LoadAsync()
        {
            var data = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);

            var secrets = await _client.GetSecretsAsync(_vault).ConfigureAwait(false);
            do
            {
                foreach (var secretItem in secrets)
                {
                    if (!_manager.Load(secretItem) || (secretItem.Attributes?.Enabled != true))
                    {
                        continue;
                    }

                    var value = await _client.GetSecretAsync(secretItem.Id).ConfigureAwait(false);
                    var key = _manager.GetKey(value);
                    data.Add(key, value.Value);
                }

                secrets = secrets.NextPageLink != null ?
                    await _client.GetSecretsNextAsync(secrets.NextPageLink).ConfigureAwait(false) :
                    null;
            } while (secrets != null);

            Data = data;
        }
    }
}

================================================
FILE: src/Config.AzureKeyVault/AzureKeyVaultConfigurationSource.cs
================================================
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using Microsoft.Azure.KeyVault;

namespace Microsoft.Extensions.Configuration.AzureKeyVault
{
    /// <summary>
    /// Represents Azure KeyVault secrets as an <see cref="IConfigurationSource"/>.
    /// </summary>
    internal class AzureKeyVaultConfigurationSource : IConfigurationSource
    {
        /// <summary>
        /// Gets or sets the <see cref="KeyVaultClient"/> to use for retrieving values.
        /// </summary>
        public KeyVaultClient Client { get; set; }

        /// <summary>
        /// Gets or sets the vault uri.
        /// </summary>
        public string Vault { get; set; }

        /// <summary>
        /// Gets or sets the <see cref="IKeyVaultSecretManager"/> instance used to control secret loading.
        /// </summary>
        public IKeyVaultSecretManager Manager { get; set; }

        /// <inheritdoc />
        public IConfigurationProvider Build(IConfigurationBuilder builder)
        {
            return new AzureKeyVaultConfigurationProvider(new KeyVaultClientWrapper(Client), Vault, Manager);
        }
    }
}

================================================
FILE: src/Config.AzureKeyVault/Config.AzureKeyVault.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <AssemblyName>Microsoft.Extensions.Configuration.AzureKeyVault</AssemblyName>
    <RootNamespace>Microsoft.Extensions.Configuration.AzureKeyVault</RootNamespace>
    <Description>Azure KeyVault configuration provider implementation for Microsoft.Extensions.Configuration.</Description>
    <TargetFramework>netstandard2.0</TargetFramework>
    <PackageTags>$(PackageTags);azure;keyvault</PackageTags>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\Config\Config.csproj" />
    <ProjectReference Include="..\Config.FileExtensions\Config.FileExtensions.csproj" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Azure.KeyVault" Version="$(MicrosoftAzureKeyVaultPackageVersion)" />
    <PackageReference Include="Microsoft.Azure.Services.AppAuthentication" Version="$(MicrosoftAzureServicesAppAuthenticationPackageVersion)" />
  </ItemGroup>

</Project>


================================================
FILE: src/Config.AzureKeyVault/DefaultKeyVaultSecretManager.cs
================================================
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using Microsoft.Azure.KeyVault;
using Microsoft.Azure.KeyVault.Models;

namespace Microsoft.Extensions.Configuration.AzureKeyVault
{
    /// <summary>
    /// Default implementation of <see cref="IKeyVaultSecretManager"/> that loads all secrets
    /// and replaces '--' with ':" in key names.
    /// </summary>
    public class DefaultKeyVaultSecretManager : IKeyVaultSecretManager
    {
        /// <inheritdoc />
        public virtual string GetKey(SecretBundle secret)
        {
            return secret.SecretIdentifier.Name.Replace("--", ConfigurationPath.KeyDelimiter);
        }

        /// <inheritdoc />
        public virtual bool Load(SecretItem secret)
        {
            return true;
        }
    }
}


================================================
FILE: src/Config.AzureKeyVault/IKeyVaultClient.cs
================================================
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System.Threading.Tasks;
using Microsoft.Azure.KeyVault;
using Microsoft.Azure.KeyVault.Models;
using Microsoft.Rest.Azure;

namespace Microsoft.Extensions.Configuration.AzureKeyVault
{
    /// <summary>
    /// Client class to perform cryptographic key operations and vault operations
    /// against the Key Vault service.
    /// Thread safety: This class is thread-safe.
    /// </summary>
    internal interface IKeyVaultClient
    {
        /// <summary>List secrets in the specified vault</summary>
        /// <param name="vault">The URL for the vault containing the secrets.</param>
        /// <returns>A response message containing a list of secrets in the vault along with a link to the next page of secrets</returns>
        Task<IPage<SecretItem>> GetSecretsAsync(string vault);

        /// <summary>Gets a secret.</summary>
        /// <param name="secretIdentifier">The URL for the secret.</param>
        /// <returns>A response message containing the secret</returns>
        Task<SecretBundle> GetSecretAsync(string secretIdentifier);

        /// <summary>List the next page of secrets</summary>
        /// <param name="nextLink">nextLink value from a previous call to GetSecrets or GetSecretsNext</param>
        /// <returns>A response message containing a list of secrets in the vault along with a link to the next page of secrets</returns>
        Task<IPage<SecretItem>> GetSecretsNextAsync(string nextLink);
    }
}

================================================
FILE: src/Config.AzureKeyVault/IKeyVaultSecretManager.cs
================================================
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using Microsoft.Azure.KeyVault.Models;

namespace Microsoft.Extensions.Configuration.AzureKeyVault
{
    /// <summary>
    /// The <see cref="IKeyVaultSecretManager"/> instance used to control secret loading.
    /// </summary>
    public interface IKeyVaultSecretManager
    {
        /// <summary>
        /// Checks if <see cref="SecretItem"/> value should be retrieved.
        /// </summary>
        /// <param name="secret">The <see cref="SecretItem"/> instance.</param>
        /// <returns><code>true</code> is secrets value should be loaded, otherwise <code>false</code>.</returns>
        bool Load(SecretItem secret);

        /// <summary>
        /// Maps secret to a configuration key.
        /// </summary>
        /// <param name="secret">The <see cref="SecretBundle"/> instance.</param>
        /// <returns>Configuration key name to store secret value.</returns>
        string GetKey(SecretBundle secret);
    }
}

================================================
FILE: src/Config.AzureKeyVault/KeyVaultClientWrapper.cs
================================================
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System.Threading.Tasks;
using Microsoft.Azure.KeyVault;
using Microsoft.Azure.KeyVault.Models;
using Microsoft.Rest.Azure;

namespace Microsoft.Extensions.Configuration.AzureKeyVault
{
    /// <inheritdoc />
    internal class KeyVaultClientWrapper : IKeyVaultClient
    {
        private readonly KeyVaultClient _keyVaultClientImplementation;

        /// <summary>
        /// Creates a new instance of <see cref="KeyVaultClientWrapper"/>.
        /// </summary>
        /// <param name="keyVaultClientImplementation">The <see cref="KeyVaultClient"/> instance to wrap.</param>
        public KeyVaultClientWrapper(KeyVaultClient keyVaultClientImplementation)
        {
            _keyVaultClientImplementation = keyVaultClientImplementation;
        }

        /// <inheritdoc />
        public Task<IPage<SecretItem>> GetSecretsAsync(string vault)
        {
            return _keyVaultClientImplementation.GetSecretsAsync(vault);
        }

        /// <inheritdoc />
        public Task<SecretBundle> GetSecretAsync(string secretIdentifier)
        {
            return _keyVaultClientImplementation.GetSecretAsync(secretIdentifier);
        }

        /// <inheritdoc />
        public Task<IPage<SecretItem>> GetSecretsNextAsync(string nextLink)
        {
            return _keyVaultClientImplementation.GetSecretsNextAsync(nextLink);
        }
    }
}

================================================
FILE: src/Config.AzureKeyVault/Properties/AssemblyInfo.cs
================================================
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System.Runtime.CompilerServices;

[assembly: InternalsVisibleTo("Microsoft.Extensions.Configuration.AzureKeyVault.Test, PublicKey=0024000004800000940000000602000000240000525341310004000001000100f33a29044fa9d740c9b3213a93e57c84b472c84e0b8a0e1ae48e67a9f8f6de9d5f7f3d52ac23e48ac51801f1dc950abe901da34d2a9e3baadb141a17c77ef3c565dd5ee5054b91cf63bb3c6ab83f72ab3aafe93d0fc3c2348b764fafb0b1c0733de51459aeab46580384bf9d74c4e28164b7cde247f891ba07891c9d872ad2bb")]
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")]



================================================
FILE: src/Config.AzureKeyVault/baseline.netcore.json
================================================
{
  "AssemblyIdentity": "Microsoft.Extensions.Configuration.AzureKeyVault, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60",
  "Types": [
    {
      "Name": "Microsoft.Extensions.Configuration.AzureKeyVaultConfigurationExtensions",
      "Visibility": "Public",
      "Kind": "Class",
      "Abstract": true,
      "Static": true,
      "Sealed": true,
      "ImplementedInterfaces": [],
      "Members": [
        {
          "Kind": "Method",
          "Name": "AddAzureKeyVault",
          "Parameters": [
            {
              "Name": "configurationBuilder",
              "Type": "Microsoft.Extensions.Configuration.IConfigurationBuilder"
            },
            {
              "Name": "vault",
              "Type": "System.String"
            },
            {
              "Name": "clientId",
              "Type": "System.String"
            },
            {
              "Name": "clientSecret",
              "Type": "System.String"
            }
          ],
          "ReturnType": "Microsoft.Extensions.Configuration.IConfigurationBuilder",
          "Static": true,
          "Extension": true,
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "AddAzureKeyVault",
          "Parameters": [
            {
              "Name": "configurationBuilder",
              "Type": "Microsoft.Extensions.Configuration.IConfigurationBuilder"
            },
            {
              "Name": "vault",
              "Type": "System.String"
            },
            {
              "Name": "clientId",
              "Type": "System.String"
            },
            {
              "Name": "clientSecret",
              "Type": "System.String"
            },
            {
              "Name": "manager",
              "Type": "Microsoft.Extensions.Configuration.AzureKeyVault.IKeyVaultSecretManager"
            }
          ],
          "ReturnType": "Microsoft.Extensions.Configuration.IConfigurationBuilder",
          "Static": true,
          "Extension": true,
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "AddAzureKeyVault",
          "Parameters": [
            {
              "Name": "configurationBuilder",
              "Type": "Microsoft.Extensions.Configuration.IConfigurationBuilder"
            },
            {
              "Name": "vault",
              "Type": "System.String"
            },
            {
              "Name": "clientId",
              "Type": "System.String"
            },
            {
              "Name": "certificate",
              "Type": "System.Security.Cryptography.X509Certificates.X509Certificate2"
            }
          ],
          "ReturnType": "Microsoft.Extensions.Configuration.IConfigurationBuilder",
          "Static": true,
          "Extension": true,
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "AddAzureKeyVault",
          "Parameters": [
            {
              "Name": "configurationBuilder",
              "Type": "Microsoft.Extensions.Configuration.IConfigurationBuilder"
            },
            {
              "Name": "vault",
              "Type": "System.String"
            },
            {
              "Name": "clientId",
              "Type": "System.String"
            },
            {
              "Name": "certificate",
              "Type": "System.Security.Cryptography.X509Certificates.X509Certificate2"
            },
            {
              "Name": "manager",
              "Type": "Microsoft.Extensions.Configuration.AzureKeyVault.IKeyVaultSecretManager"
            }
          ],
          "ReturnType": "Microsoft.Extensions.Configuration.IConfigurationBuilder",
          "Static": true,
          "Extension": true,
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "AddAzureKeyVault",
          "Parameters": [
            {
              "Name": "configurationBuilder",
              "Type": "Microsoft.Extensions.Configuration.IConfigurationBuilder"
            },
            {
              "Name": "vault",
              "Type": "System.String"
            }
          ],
          "ReturnType": "Microsoft.Extensions.Configuration.IConfigurationBuilder",
          "Static": true,
          "Extension": true,
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "AddAzureKeyVault",
          "Parameters": [
            {
              "Name": "configurationBuilder",
              "Type": "Microsoft.Extensions.Configuration.IConfigurationBuilder"
            },
            {
              "Name": "vault",
              "Type": "System.String"
            },
            {
              "Name": "manager",
              "Type": "Microsoft.Extensions.Configuration.AzureKeyVault.IKeyVaultSecretManager"
            }
          ],
          "ReturnType": "Microsoft.Extensions.Configuration.IConfigurationBuilder",
          "Static": true,
          "Extension": true,
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "AddAzureKeyVault",
          "Parameters": [
            {
              "Name": "configurationBuilder",
              "Type": "Microsoft.Extensions.Configuration.IConfigurationBuilder"
            },
            {
              "Name": "vault",
              "Type": "System.String"
            },
            {
              "Name": "client",
              "Type": "Microsoft.Azure.KeyVault.KeyVaultClient"
            },
            {
              "Name": "manager",
              "Type": "Microsoft.Extensions.Configuration.AzureKeyVault.IKeyVaultSecretManager"
            }
          ],
          "ReturnType": "Microsoft.Extensions.Configuration.IConfigurationBuilder",
          "Static": true,
          "Extension": true,
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.Extensions.Configuration.AzureKeyVault.DefaultKeyVaultSecretManager",
      "Visibility": "Public",
      "Kind": "Class",
      "ImplementedInterfaces": [
        "Microsoft.Extensions.Configuration.AzureKeyVault.IKeyVaultSecretManager"
      ],
      "Members": [
        {
          "Kind": "Method",
          "Name": "GetKey",
          "Parameters": [
            {
              "Name": "secret",
              "Type": "Microsoft.Azure.KeyVault.Models.SecretBundle"
            }
          ],
          "ReturnType": "System.String",
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Configuration.AzureKeyVault.IKeyVaultSecretManager",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "Load",
          "Parameters": [
            {
              "Name": "secret",
              "Type": "Microsoft.Azure.KeyVault.Models.SecretItem"
            }
          ],
          "ReturnType": "System.Boolean",
          "Virtual": true,
          "ImplementedInterface": "Microsoft.Extensions.Configuration.AzureKeyVault.IKeyVaultSecretManager",
          "Visibility": "Public",
          "GenericParameter": []
        },
        {
          "Kind": "Constructor",
          "Name": ".ctor",
          "Parameters": [],
          "Visibility": "Public",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    },
    {
      "Name": "Microsoft.Extensions.Configuration.AzureKeyVault.IKeyVaultSecretManager",
      "Visibility": "Public",
      "Kind": "Interface",
      "Abstract": true,
      "ImplementedInterfaces": [],
      "Members": [
        {
          "Kind": "Method",
          "Name": "Load",
          "Parameters": [
            {
              "Name": "secret",
              "Type": "Microsoft.Azure.KeyVault.Models.SecretItem"
            }
          ],
          "ReturnType": "System.Boolean",
          "GenericParameter": []
        },
        {
          "Kind": "Method",
          "Name": "GetKey",
          "Parameters": [
            {
              "Name": "secret",
              "Type": "Microsoft.Azure.KeyVault.Models.SecretBundle"
            }
          ],
          "ReturnType": "System.String",
          "GenericParameter": []
        }
      ],
      "GenericParameters": []
    }
  ]
}

================================================
FILE: src/Config.Binder/BinderOptions.cs
================================================
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

namespace Microsoft.Extensions.Configuration
{
    /// <summary>
    /// Options class used by the <see cref="ConfigurationBinder"/>.
    /// </summary>
    public class BinderOptions
    {
        /// <summary>
        /// When false (the default), the binder will only attempt to set public properties.
        /// If true, the binder will attempt to set all non read-only properties.
        /// </summary>
        public bool BindNonPublicProperties { get; set; }
    }
}

================================================
FILE: src/Config.Binder/Config.Binder.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <AssemblyName>Microsoft.Extensions.Configuration.Binder</AssemblyName>
    <RootNamespace>Microsoft.Extensions.Configuration.Binder</RootNamespace>
    <Description>Functionality to bind an object to data in configuration providers for Microsoft.Extensions.Configuration.</Description>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\Config\Config.csproj" />
  </ItemGroup>

</Project>


================================================
FILE: src/Config.Binder/ConfigurationBinder.cs
================================================
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using Microsoft.Extensions.Configuration.Binder;

namespace Microsoft.Extensions.Configuration
{
    /// <summary>
    /// Static helper class that allows binding strongly typed objects to configuration values.
    /// </summary>
    public static class ConfigurationBinder
    {
        /// <summary>
        /// Attempts to bind the configuration instance to a new instance of type T.
        /// If this configuration section has a value, that will be used.
        /// Otherwise binding by matching property names against configuration keys recursively.
        /// </summary>
        /// <typeparam name="T">The type of the new instance to bind.</typeparam>
        /// <param name="configuration">The configuration instance to bind.</param>
        /// <returns>The new instance of T if successful, default(T) otherwise.</returns>
        public static T Get<T>(this IConfiguration configuration)
            => configuration.Get<T>(_ => { });

        /// <summary>
        /// Attempts to bind the configuration instance to a new instance of type T.
        /// If this configuration section has a value, that will be used.
        /// Otherwise binding by matching property names against configuration keys recursively.
        /// </summary>
        /// <typeparam name="T">The type of the new instance to bind.</typeparam>
        /// <param name="configuration">The configuration instance to bind.</param>
        /// <param name="configureOptions">Configures the binder options.</param>
        /// <returns>The new instance of T if successful, default(T) otherwise.</returns>
        public static T Get<T>(this IConfiguration configuration, Action<BinderOptions> configureOptions)
        {
            if (configuration == null)
            {
                throw new ArgumentNullException(nameof(configuration));
            }

            var result = configuration.Get(typeof(T), configureOptions);
            if (result == null)
            {
                return default(T);
            }
            return (T)result;
        }

        /// <summary>
        /// Attempts to bind the configuration instance to a new instance of type T.
        /// If this configuration section has a value, that will be used.
        /// Otherwise binding by matching property names against configuration keys recursively.
        /// </summary>
        /// <param name="configuration">The configuration instance to bind.</param>
        /// <param name="type">The type of the new instance to bind.</param>
        /// <returns>The new instance if successful, null otherwise.</returns>
        public static object Get(this IConfiguration configuration, Type type)
            => configuration.Get(type, _ => { });

        /// <summary>
        /// Attempts to bind the configuration instance to a new instance of type T.
        /// If this configuration section has a value, that will be used.
        /// Otherwise binding by matching property names against configuration keys recursively.
        /// </summary>
        /// <param name="configuration">The configuration instance to bind.</param>
        /// <param name="type">The type of the new instance to bind.</param>
        /// <param name="configureOptions">Configures the binder options.</param>
        /// <returns>The new instance if successful, null otherwise.</returns>
        public static object Get(this IConfiguration configuration, Type type, Action<BinderOptions> configureOptions)
        {
            if (configuration == null)
            {
                throw new ArgumentNullException(nameof(configuration));
            }

            var options = new BinderOptions();
            configureOptions?.Invoke(options);
            return BindInstance(type, instance: null, config: configuration, options: options);
        }

        /// <summary>
        /// Attempts to bind the given object instance to the configuration section specified by the key by matching property names against configuration keys recursively.
        /// </summary>
        /// <param name="configuration">The configuration instance to bind.</param>
        /// <param name="key">The key of the configuration section to bind.</param>
        /// <param name="instance">The object to bind.</param>
        public static void Bind(this IConfiguration configuration, string key, object instance)
            => configuration.GetSection(key).Bind(instance);

        /// <summary>
        /// Attempts to bind the given object instance to configuration values by matching property names against configuration keys recursively.
        /// </summary>
        /// <param name="configuration">The configuration instance to bind.</param>
        /// <param name="instance">The object to bind.</param>
        public static void Bind(this IConfiguration configuration, object instance)
            => configuration.Bind(instance, o => { });

        /// <summary>
        /// Attempts to bind the given object instance to configuration values by matching property names against configuration keys recursively.
        /// </summary>
        /// <param name="configuration">The configuration instance to bind.</param>
        /// <param name="instance">The object to bind.</param>
        /// <param name="configureOptions">Configures the binder options.</param>
        public static void Bind(this IConfiguration configuration, object instance, Action<BinderOptions> configureOptions)
        {
            if (configuration == null)
            {
                throw new ArgumentNullException(nameof(configuration));
            }

            if (instance != null)
            {
                var options = new BinderOptions();
                configureOptions?.Invoke(options);
                BindInstance(instance.GetType(), insta
Download .txt
gitextract_p1se3q03/

├── .appveyor.yml
├── .gitattributes
├── .gitignore
├── .travis.yml
├── .vsts-pipelines/
│   └── builds/
│       ├── ci-internal.yml
│       └── ci-public.yml
├── CONTRIBUTING.md
├── Configuration.sln
├── Directory.Build.props
├── Directory.Build.targets
├── LICENSE.txt
├── NuGet.config
├── NuGetPackageVerifier.json
├── README.md
├── build/
│   ├── Key.snk
│   ├── dependencies.props
│   ├── repo.props
│   └── sources.props
├── build.cmd
├── build.sh
├── korebuild-lock.txt
├── korebuild.json
├── run.cmd
├── run.ps1
├── run.sh
├── samples/
│   └── KeyVaultSample/
│       ├── EnvironmentSecretManager.cs
│       ├── KeyVaultSample.csproj
│       ├── Program.cs
│       └── settings.json
├── src/
│   ├── Config/
│   │   ├── ChainedBuilderExtensions.cs
│   │   ├── ChainedConfigurationProvider.cs
│   │   ├── ChainedConfigurationSource.cs
│   │   ├── Config.csproj
│   │   ├── ConfigurationBuilder.cs
│   │   ├── ConfigurationKeyComparer.cs
│   │   ├── ConfigurationProvider.cs
│   │   ├── ConfigurationReloadToken.cs
│   │   ├── ConfigurationRoot.cs
│   │   ├── ConfigurationSection.cs
│   │   ├── MemoryConfigurationBuilderExtensions.cs
│   │   ├── MemoryConfigurationProvider.cs
│   │   ├── MemoryConfigurationSource.cs
│   │   ├── Properties/
│   │   │   ├── AssemblyInfo.cs
│   │   │   └── Resources.Designer.cs
│   │   ├── Resources.resx
│   │   └── baseline.netcore.json
│   ├── Config.Abstractions/
│   │   ├── Config.Abstractions.csproj
│   │   ├── ConfigurationExtensions.cs
│   │   ├── ConfigurationPath.cs
│   │   ├── IConfiguration.cs
│   │   ├── IConfigurationBuilder.cs
│   │   ├── IConfigurationProvider.cs
│   │   ├── IConfigurationRoot.cs
│   │   ├── IConfigurationSection.cs
│   │   ├── IConfigurationSource.cs
│   │   └── baseline.netcore.json
│   ├── Config.AzureKeyVault/
│   │   ├── AzureKeyVaultConfigurationExtensions.cs
│   │   ├── AzureKeyVaultConfigurationProvider.cs
│   │   ├── AzureKeyVaultConfigurationSource.cs
│   │   ├── Config.AzureKeyVault.csproj
│   │   ├── DefaultKeyVaultSecretManager.cs
│   │   ├── IKeyVaultClient.cs
│   │   ├── IKeyVaultSecretManager.cs
│   │   ├── KeyVaultClientWrapper.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   └── baseline.netcore.json
│   ├── Config.Binder/
│   │   ├── BinderOptions.cs
│   │   ├── Config.Binder.csproj
│   │   ├── ConfigurationBinder.cs
│   │   ├── Properties/
│   │   │   ├── AssemblyInfo.cs
│   │   │   └── Resources.Designer.cs
│   │   ├── Resources.resx
│   │   └── baseline.netcore.json
│   ├── Config.CommandLine/
│   │   ├── CommandLineConfigurationExtensions.cs
│   │   ├── CommandLineConfigurationProvider.cs
│   │   ├── CommandLineConfigurationSource.cs
│   │   ├── Config.CommandLine.csproj
│   │   ├── Properties/
│   │   │   ├── AssemblyInfo.cs
│   │   │   └── Resources.Designer.cs
│   │   ├── Resources.resx
│   │   └── baseline.netcore.json
│   ├── Config.EnvironmentVariables/
│   │   ├── Config.EnvironmentVariables.csproj
│   │   ├── EnvironmentVariablesConfigurationProvider.cs
│   │   ├── EnvironmentVariablesConfigurationSource.cs
│   │   ├── EnvironmentVariablesExtensions.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   └── baseline.netcore.json
│   ├── Config.FileExtensions/
│   │   ├── Config.FileExtensions.csproj
│   │   ├── FileConfigurationExtensions.cs
│   │   ├── FileConfigurationProvider.cs
│   │   ├── FileConfigurationSource.cs
│   │   ├── FileLoadExceptionContext.cs
│   │   ├── Properties/
│   │   │   ├── AssemblyInfo.cs
│   │   │   └── Resources.Designer.cs
│   │   ├── Resources.resx
│   │   └── baseline.netcore.json
│   ├── Config.Ini/
│   │   ├── Config.Ini.csproj
│   │   ├── IniConfigurationExtensions.cs
│   │   ├── IniConfigurationProvider.cs
│   │   ├── IniConfigurationSource.cs
│   │   ├── Properties/
│   │   │   ├── AssemblyInfo.cs
│   │   │   └── Resources.Designer.cs
│   │   ├── Resources.resx
│   │   └── baseline.netcore.json
│   ├── Config.Json/
│   │   ├── Config.Json.csproj
│   │   ├── JsonConfigurationExtensions.cs
│   │   ├── JsonConfigurationFileParser.cs
│   │   ├── JsonConfigurationProvider.cs
│   │   ├── JsonConfigurationSource.cs
│   │   ├── Properties/
│   │   │   ├── AssemblyInfo.cs
│   │   │   └── Resources.Designer.cs
│   │   ├── Resources.resx
│   │   └── baseline.netcore.json
│   ├── Config.KeyPerFile/
│   │   ├── Config.KeyPerFile.csproj
│   │   ├── KeyPerFileConfigurationBuilderExtensions.cs
│   │   ├── KeyPerFileConfigurationProvider.cs
│   │   ├── KeyPerFileConfigurationSource.cs
│   │   └── README.md
│   ├── Config.UserSecrets/
│   │   ├── Config.UserSecrets.csproj
│   │   ├── PathHelper.cs
│   │   ├── Properties/
│   │   │   ├── AssemblyInfo.cs
│   │   │   └── Resources.Designer.cs
│   │   ├── Resources.resx
│   │   ├── UserSecretsConfigurationExtensions.cs
│   │   ├── UserSecretsIdAttribute.cs
│   │   ├── baseline.netcore.json
│   │   └── build/
│   │       └── netstandard2.0/
│   │           ├── Microsoft.Extensions.Configuration.UserSecrets.props
│   │           └── Microsoft.Extensions.Configuration.UserSecrets.targets
│   ├── Config.Xml/
│   │   ├── Config.Xml.csproj
│   │   ├── Properties/
│   │   │   ├── AssemblyInfo.cs
│   │   │   └── Resources.Designer.cs
│   │   ├── Resources.resx
│   │   ├── XmlConfigurationExtensions.cs
│   │   ├── XmlConfigurationProvider.cs
│   │   ├── XmlConfigurationSource.cs
│   │   ├── XmlDocumentDecryptor.cs
│   │   └── baseline.netcore.json
│   └── Directory.Build.props
├── test/
│   ├── Config.AzureKeyVault.Test/
│   │   ├── AzureKeyVaultConfigurationTest.cs
│   │   └── Config.AzureKeyVault.Test.csproj
│   ├── Config.Binder.Test/
│   │   ├── Config.Binder.Test.csproj
│   │   ├── ConfigurationBinderTests.cs
│   │   └── ConfigurationCollectionBindingTests.cs
│   ├── Config.CommandLine.Test/
│   │   ├── CommandLineTest.cs
│   │   └── Config.CommandLine.Test.csproj
│   ├── Config.EnvironmentVariables.Test/
│   │   ├── Config.EnvironmentVariables.Test.csproj
│   │   └── EnvironmentVariablesTest.cs
│   ├── Config.FileExtensions.Test/
│   │   ├── Config.FileExtensions.Test.csproj
│   │   └── FileConfigurationBuilderExtensionsTest.cs
│   ├── Config.FunctionalTests/
│   │   ├── ArrayTests.cs
│   │   ├── Config.FunctionalTests.csproj
│   │   ├── ConfigurationTests.cs
│   │   ├── DisposableFileSystem.cs
│   │   └── test.xml
│   ├── Config.Ini.Test/
│   │   ├── Config.Ini.Test.csproj
│   │   ├── IniConfigurationExtensionsTest.cs
│   │   └── IniConfigurationTest.cs
│   ├── Config.Json.Test/
│   │   ├── ArrayTest.cs
│   │   ├── Config.Json.Test.csproj
│   │   ├── JsonConfigurationExtensionsTest.cs
│   │   └── JsonConfigurationTest.cs
│   ├── Config.KeyPerFile.Test/
│   │   ├── Config.KeyPerFile.Test.csproj
│   │   └── KeyPerFileTests.cs
│   ├── Config.Test/
│   │   ├── Config.Test.csproj
│   │   ├── ConfigurationPathComparerTest.cs
│   │   ├── ConfigurationPathTest.cs
│   │   └── ConfigurationTest.cs
│   ├── Config.Test.Common/
│   │   ├── Config.Test.Common.csproj
│   │   ├── ConfigurationProviderExtensions.cs
│   │   └── TestStreamHelpers.cs
│   ├── Config.UserSecrets.Test/
│   │   ├── Config.UserSecrets.Test.csproj
│   │   ├── ConfigurationExtensionTest.cs
│   │   ├── MsBuildTargetTest.cs
│   │   └── PathHelperTest.cs
│   ├── Config.Xml.Test/
│   │   ├── Config.Xml.Test.csproj
│   │   ├── XmlConfigurationExtensionsTest.cs
│   │   └── XmlConfigurationTest.cs
│   └── Directory.Build.props
└── version.props
Download .txt
SYMBOL INDEX (668 symbols across 91 files)

FILE: samples/KeyVaultSample/EnvironmentSecretManager.cs
  class EnvironmentSecretManager (line 6) | public class EnvironmentSecretManager : DefaultKeyVaultSecretManager
    method EnvironmentSecretManager (line 10) | public EnvironmentSecretManager(string environment)
    method Load (line 15) | public override bool Load(SecretItem secret)
    method GetKey (line 20) | public override string GetKey(SecretBundle secret)
    method HasEnvironmentPrefix (line 29) | private bool HasEnvironmentPrefix(string name)

FILE: samples/KeyVaultSample/Program.cs
  class Program (line 9) | public class Program
    method Main (line 11) | public static void Main(string[] args)

FILE: src/Config.Abstractions/ConfigurationExtensions.cs
  class ConfigurationExtensions (line 13) | public static class ConfigurationExtensions
    method Add (line 21) | public static IConfigurationBuilder Add<TSource>(this IConfigurationBu...
    method GetConnectionString (line 34) | public static string GetConnectionString(this IConfiguration configura...
    method AsEnumerable (line 44) | public static IEnumerable<KeyValuePair<string, string>> AsEnumerable(t...
    method AsEnumerable (line 52) | public static IEnumerable<KeyValuePair<string, string>> AsEnumerable(t...
    method Exists (line 76) | public static bool Exists(this IConfigurationSection section)

FILE: src/Config.Abstractions/ConfigurationPath.cs
  class ConfigurationPath (line 12) | public static class ConfigurationPath
    method Combine (line 24) | public static string Combine(params string[] pathSegments)
    method Combine (line 38) | public static string Combine(IEnumerable<string> pathSegments)
    method GetSectionKey (line 52) | public static string GetSectionKey(string path)
    method GetParentPath (line 68) | public static string GetParentPath(string path)

FILE: src/Config.Abstractions/IConfiguration.cs
  type IConfiguration (line 12) | public interface IConfiguration
    method GetSection (line 30) | IConfigurationSection GetSection(string key);
    method GetChildren (line 36) | IEnumerable<IConfigurationSection> GetChildren();
    method GetReloadToken (line 42) | IChangeToken GetReloadToken();

FILE: src/Config.Abstractions/IConfigurationBuilder.cs
  type IConfigurationBuilder (line 11) | public interface IConfigurationBuilder
    method Add (line 29) | IConfigurationBuilder Add(IConfigurationSource source);
    method Build (line 36) | IConfigurationRoot Build();

FILE: src/Config.Abstractions/IConfigurationProvider.cs
  type IConfigurationProvider (line 12) | public interface IConfigurationProvider
    method TryGet (line 20) | bool TryGet(string key, out string value);
    method Set (line 27) | void Set(string key, string value);
    method GetReloadToken (line 33) | IChangeToken GetReloadToken();
    method Load (line 38) | void Load();
    method GetChildKeys (line 48) | IEnumerable<string> GetChildKeys(IEnumerable<string> earlierKeys, stri...

FILE: src/Config.Abstractions/IConfigurationRoot.cs
  type IConfigurationRoot (line 12) | public interface IConfigurationRoot : IConfiguration
    method Reload (line 17) | void Reload();

FILE: src/Config.Abstractions/IConfigurationSection.cs
  type IConfigurationSection (line 9) | public interface IConfigurationSection : IConfiguration

FILE: src/Config.Abstractions/IConfigurationSource.cs
  type IConfigurationSource (line 11) | public interface IConfigurationSource
    method Build (line 18) | IConfigurationProvider Build(IConfigurationBuilder builder);

FILE: src/Config.AzureKeyVault/AzureKeyVaultConfigurationExtensions.cs
  class AzureKeyVaultConfigurationExtensions (line 17) | public static class AzureKeyVaultConfigurationExtensions
    method AddAzureKeyVault (line 27) | public static IConfigurationBuilder AddAzureKeyVault(
    method AddAzureKeyVault (line 45) | public static IConfigurationBuilder AddAzureKeyVault(
    method GetTokenFromClientSecret (line 66) | private static async Task<string> GetTokenFromClientSecret(string auth...
    method AddAzureKeyVault (line 82) | public static IConfigurationBuilder AddAzureKeyVault(
    method AddAzureKeyVault (line 100) | public static IConfigurationBuilder AddAzureKeyVault(
    method GetTokenFromClientCertificate (line 121) | private static async Task<string> GetTokenFromClientCertificate(string...
    method AddAzureKeyVault (line 134) | public static IConfigurationBuilder AddAzureKeyVault(
    method AddAzureKeyVault (line 148) | public static IConfigurationBuilder AddAzureKeyVault(
    method AddAzureKeyVault (line 168) | public static IConfigurationBuilder AddAzureKeyVault(

FILE: src/Config.AzureKeyVault/AzureKeyVaultConfigurationProvider.cs
  class AzureKeyVaultConfigurationProvider (line 14) | internal class AzureKeyVaultConfigurationProvider : ConfigurationProvider
    method AzureKeyVaultConfigurationProvider (line 26) | public AzureKeyVaultConfigurationProvider(IKeyVaultClient client, stri...
    method Load (line 46) | public override void Load() => LoadAsync().ConfigureAwait(false).GetAw...
    method LoadAsync (line 48) | private async Task LoadAsync()

FILE: src/Config.AzureKeyVault/AzureKeyVaultConfigurationSource.cs
  class AzureKeyVaultConfigurationSource (line 11) | internal class AzureKeyVaultConfigurationSource : IConfigurationSource
    method Build (line 29) | public IConfigurationProvider Build(IConfigurationBuilder builder)

FILE: src/Config.AzureKeyVault/DefaultKeyVaultSecretManager.cs
  class DefaultKeyVaultSecretManager (line 13) | public class DefaultKeyVaultSecretManager : IKeyVaultSecretManager
    method GetKey (line 16) | public virtual string GetKey(SecretBundle secret)
    method Load (line 22) | public virtual bool Load(SecretItem secret)

FILE: src/Config.AzureKeyVault/IKeyVaultClient.cs
  type IKeyVaultClient (line 16) | internal interface IKeyVaultClient
    method GetSecretsAsync (line 21) | Task<IPage<SecretItem>> GetSecretsAsync(string vault);
    method GetSecretAsync (line 26) | Task<SecretBundle> GetSecretAsync(string secretIdentifier);
    method GetSecretsNextAsync (line 31) | Task<IPage<SecretItem>> GetSecretsNextAsync(string nextLink);

FILE: src/Config.AzureKeyVault/IKeyVaultSecretManager.cs
  type IKeyVaultSecretManager (line 11) | public interface IKeyVaultSecretManager
    method Load (line 18) | bool Load(SecretItem secret);
    method GetKey (line 25) | string GetKey(SecretBundle secret);

FILE: src/Config.AzureKeyVault/KeyVaultClientWrapper.cs
  class KeyVaultClientWrapper (line 12) | internal class KeyVaultClientWrapper : IKeyVaultClient
    method KeyVaultClientWrapper (line 20) | public KeyVaultClientWrapper(KeyVaultClient keyVaultClientImplementation)
    method GetSecretsAsync (line 26) | public Task<IPage<SecretItem>> GetSecretsAsync(string vault)
    method GetSecretAsync (line 32) | public Task<SecretBundle> GetSecretAsync(string secretIdentifier)
    method GetSecretsNextAsync (line 38) | public Task<IPage<SecretItem>> GetSecretsNextAsync(string nextLink)

FILE: src/Config.Binder/BinderOptions.cs
  class BinderOptions (line 9) | public class BinderOptions

FILE: src/Config.Binder/ConfigurationBinder.cs
  class ConfigurationBinder (line 16) | public static class ConfigurationBinder
    method Get (line 26) | public static T Get<T>(this IConfiguration configuration)
    method Get (line 38) | public static T Get<T>(this IConfiguration configuration, Action<Binde...
    method Get (line 61) | public static object Get(this IConfiguration configuration, Type type)
    method Get (line 73) | public static object Get(this IConfiguration configuration, Type type,...
    method Bind (line 91) | public static void Bind(this IConfiguration configuration, string key,...
    method Bind (line 99) | public static void Bind(this IConfiguration configuration, object inst...
    method Bind (line 108) | public static void Bind(this IConfiguration configuration, object inst...
    method GetValue (line 130) | public static T GetValue<T>(this IConfiguration configuration, string ...
    method GetValue (line 143) | public static T GetValue<T>(this IConfiguration configuration, string ...
    method GetValue (line 155) | public static object GetValue(this IConfiguration configuration, Type ...
    method GetValue (line 168) | public static object GetValue(this IConfiguration configuration, Type ...
    method BindNonScalar (line 178) | private static void BindNonScalar(this IConfiguration configuration, o...
    method BindProperty (line 189) | private static void BindProperty(PropertyInfo property, object instanc...
    method BindToCollection (line 217) | private static object BindToCollection(TypeInfo typeInfo, IConfigurati...
    method AttemptBindToCollectionInterfaces (line 226) | private static object AttemptBindToCollectionInterfaces(Type type, ICo...
    method BindInstance (line 283) | private static object BindInstance(Type type, object instance, IConfig...
    method CreateInstance (line 350) | private static object CreateInstance(Type type)
    method BindDictionary (line 385) | private static void BindDictionary(object dictionary, Type dictionaryT...
    method BindCollection (line 424) | private static void BindCollection(object collection, Type collectionT...
    method BindArray (line 452) | private static Array BindArray(Array source, IConfiguration config, Bi...
    method TryConvertValue (line 487) | private static bool TryConvertValue(Type type, string value, out objec...
    method ConvertValue (line 523) | private static object ConvertValue(Type type, string value)
    method FindOpenGenericInterface (line 535) | private static Type FindOpenGenericInterface(Type expected, Type actual)
    method GetAllProperties (line 556) | private static IEnumerable<PropertyInfo> GetAllProperties(TypeInfo type)

FILE: src/Config.Binder/Properties/Resources.Designer.cs
  class Resources (line 8) | internal static class Resources
    method FormatError_CannotActivateAbstractOrInterface (line 24) | internal static string FormatError_CannotActivateAbstractOrInterface(o...
    method FormatError_FailedBinding (line 38) | internal static string FormatError_FailedBinding(object p0, object p1)
    method FormatError_FailedToActivate (line 52) | internal static string FormatError_FailedToActivate(object p0)
    method FormatError_MissingParameterlessConstructor (line 66) | internal static string FormatError_MissingParameterlessConstructor(obj...
    method FormatError_UnsupportedMultidimensionalArray (line 80) | internal static string FormatError_UnsupportedMultidimensionalArray(ob...
    method GetString (line 83) | private static string GetString(string name, params string[] formatter...

FILE: src/Config.CommandLine/CommandLineConfigurationExtensions.cs
  class CommandLineConfigurationExtensions (line 13) | public static class CommandLineConfigurationExtensions
    method AddCommandLine (line 21) | public static IConfigurationBuilder AddCommandLine(this IConfiguration...
    method AddCommandLine (line 33) | public static IConfigurationBuilder AddCommandLine(
    method AddCommandLine (line 48) | public static IConfigurationBuilder AddCommandLine(this IConfiguration...

FILE: src/Config.CommandLine/CommandLineConfigurationProvider.cs
  class CommandLineConfigurationProvider (line 12) | public class CommandLineConfigurationProvider : ConfigurationProvider
    method CommandLineConfigurationProvider (line 21) | public CommandLineConfigurationProvider(IEnumerable<string> args, IDic...
    method Load (line 39) | public override void Load()
    method GetValidatedSwitchMappingsCopy (line 134) | private Dictionary<string, string> GetValidatedSwitchMappingsCopy(IDic...

FILE: src/Config.CommandLine/CommandLineConfigurationSource.cs
  class CommandLineConfigurationSource (line 11) | public class CommandLineConfigurationSource : IConfigurationSource
    method Build (line 28) | public IConfigurationProvider Build(IConfigurationBuilder builder)

FILE: src/Config.CommandLine/Properties/Resources.Designer.cs
  class Resources (line 8) | internal static class Resources
    method FormatError_DuplicatedKeyInSwitchMappings (line 24) | internal static string FormatError_DuplicatedKeyInSwitchMappings(objec...
    method FormatError_InvalidSwitchMapping (line 38) | internal static string FormatError_InvalidSwitchMapping(object p0)
    method FormatError_ShortSwitchNotDefined (line 52) | internal static string FormatError_ShortSwitchNotDefined(object p0)
    method GetString (line 55) | private static string GetString(string name, params string[] formatter...

FILE: src/Config.EnvironmentVariables/EnvironmentVariablesConfigurationProvider.cs
  class EnvironmentVariablesConfigurationProvider (line 14) | public class EnvironmentVariablesConfigurationProvider : ConfigurationPr...
    method EnvironmentVariablesConfigurationProvider (line 29) | public EnvironmentVariablesConfigurationProvider() : this(string.Empty)
    method EnvironmentVariablesConfigurationProvider (line 36) | public EnvironmentVariablesConfigurationProvider(string prefix)
    method Load (line 44) | public override void Load()
    method Load (line 49) | internal void Load(IDictionary envVariables)
    method NormalizeKey (line 65) | private static string NormalizeKey(string key)
    method AzureEnvToAppEnv (line 70) | private static IEnumerable<DictionaryEntry> AzureEnvToAppEnv(Dictionar...

FILE: src/Config.EnvironmentVariables/EnvironmentVariablesConfigurationSource.cs
  class EnvironmentVariablesConfigurationSource (line 9) | public class EnvironmentVariablesConfigurationSource : IConfigurationSource
    method Build (line 21) | public IConfigurationProvider Build(IConfigurationBuilder builder)

FILE: src/Config.EnvironmentVariables/EnvironmentVariablesExtensions.cs
  class EnvironmentVariablesExtensions (line 12) | public static class EnvironmentVariablesExtensions
    method AddEnvironmentVariables (line 19) | public static IConfigurationBuilder AddEnvironmentVariables(this IConf...
    method AddEnvironmentVariables (line 32) | public static IConfigurationBuilder AddEnvironmentVariables(
    method AddEnvironmentVariables (line 46) | public static IConfigurationBuilder AddEnvironmentVariables(this IConf...

FILE: src/Config.FileExtensions/FileConfigurationExtensions.cs
  class FileConfigurationExtensions (line 12) | public static class FileConfigurationExtensions
    method SetFileProvider (line 23) | public static IConfigurationBuilder SetFileProvider(this IConfiguratio...
    method GetFileProvider (line 39) | public static IFileProvider GetFileProvider(this IConfigurationBuilder...
    method SetBasePath (line 60) | public static IConfigurationBuilder SetBasePath(this IConfigurationBui...
    method SetFileLoadExceptionHandler (line 81) | public static IConfigurationBuilder SetFileLoadExceptionHandler(this I...
    method GetFileLoadExceptionHandler (line 97) | public static Action<FileLoadExceptionContext> GetFileLoadExceptionHan...

FILE: src/Config.FileExtensions/FileConfigurationProvider.cs
  class FileConfigurationProvider (line 16) | public abstract class FileConfigurationProvider : ConfigurationProvider
    method FileConfigurationProvider (line 22) | public FileConfigurationProvider(FileConfigurationSource source)
    method Load (line 46) | private void Load(bool reload)
    method Load (line 107) | public override void Load()
    method Load (line 116) | public abstract void Load(Stream stream);

FILE: src/Config.FileExtensions/FileConfigurationSource.cs
  class FileConfigurationSource (line 13) | public abstract class FileConfigurationSource : IConfigurationSource
    method Build (line 51) | public abstract IConfigurationProvider Build(IConfigurationBuilder bui...
    method EnsureDefaults (line 57) | public void EnsureDefaults(IConfigurationBuilder builder)
    method ResolveFileProvider (line 67) | public void ResolveFileProvider()

FILE: src/Config.FileExtensions/FileLoadExceptionContext.cs
  class FileLoadExceptionContext (line 11) | public class FileLoadExceptionContext

FILE: src/Config.FileExtensions/Properties/Resources.Designer.cs
  class Resources (line 8) | internal static class Resources
    method FormatError_ExpectedPhysicalPath (line 24) | internal static string FormatError_ExpectedPhysicalPath(object p0)
    method FormatError_FileNotFound (line 38) | internal static string FormatError_FileNotFound(object p0)
    method GetString (line 41) | private static string GetString(string name, params string[] formatter...

FILE: src/Config.Ini/IniConfigurationExtensions.cs
  class IniConfigurationExtensions (line 14) | public static class IniConfigurationExtensions
    method AddIniFile (line 23) | public static IConfigurationBuilder AddIniFile(this IConfigurationBuil...
    method AddIniFile (line 36) | public static IConfigurationBuilder AddIniFile(this IConfigurationBuil...
    method AddIniFile (line 50) | public static IConfigurationBuilder AddIniFile(this IConfigurationBuil...
    method AddIniFile (line 65) | public static IConfigurationBuilder AddIniFile(this IConfigurationBuil...
    method AddIniFile (line 92) | public static IConfigurationBuilder AddIniFile(this IConfigurationBuil...

FILE: src/Config.Ini/IniConfigurationProvider.cs
  class IniConfigurationProvider (line 22) | public class IniConfigurationProvider : FileConfigurationProvider
    method IniConfigurationProvider (line 28) | public IniConfigurationProvider(IniConfigurationSource source) : base(...
    method Load (line 34) | public override void Load(Stream stream)

FILE: src/Config.Ini/IniConfigurationSource.cs
  class IniConfigurationSource (line 18) | public class IniConfigurationSource : FileConfigurationSource
    method Build (line 25) | public override IConfigurationProvider Build(IConfigurationBuilder bui...

FILE: src/Config.Ini/Properties/Resources.Designer.cs
  class Resources (line 8) | internal static class Resources
    method FormatError_InvalidFilePath (line 24) | internal static string FormatError_InvalidFilePath()
    method FormatError_KeyIsDuplicated (line 38) | internal static string FormatError_KeyIsDuplicated(object p0)
    method FormatError_UnrecognizedLineFormat (line 52) | internal static string FormatError_UnrecognizedLineFormat(object p0)
    method GetString (line 55) | private static string GetString(string name, params string[] formatter...

FILE: src/Config.Json/JsonConfigurationExtensions.cs
  class JsonConfigurationExtensions (line 14) | public static class JsonConfigurationExtensions
    method AddJsonFile (line 23) | public static IConfigurationBuilder AddJsonFile(this IConfigurationBui...
    method AddJsonFile (line 36) | public static IConfigurationBuilder AddJsonFile(this IConfigurationBui...
    method AddJsonFile (line 50) | public static IConfigurationBuilder AddJsonFile(this IConfigurationBui...
    method AddJsonFile (line 65) | public static IConfigurationBuilder AddJsonFile(this IConfigurationBui...
    method AddJsonFile (line 92) | public static IConfigurationBuilder AddJsonFile(this IConfigurationBui...

FILE: src/Config.Json/JsonConfigurationFileParser.cs
  class JsonConfigurationFileParser (line 14) | internal class JsonConfigurationFileParser
    method JsonConfigurationFileParser (line 16) | private JsonConfigurationFileParser() { }
    method Parse (line 24) | public static IDictionary<string, string> Parse(Stream input)
    method ParseStream (line 27) | private IDictionary<string, string> ParseStream(Stream input)
    method VisitJObject (line 40) | private void VisitJObject(JObject jObject)
    method VisitProperty (line 50) | private void VisitProperty(JProperty property)
    method VisitToken (line 55) | private void VisitToken(JToken token)
    method VisitArray (line 86) | private void VisitArray(JArray array)
    method VisitPrimitive (line 96) | private void VisitPrimitive(JValue data)
    method EnterContext (line 107) | private void EnterContext(string context)
    method ExitContext (line 113) | private void ExitContext()

FILE: src/Config.Json/JsonConfigurationProvider.cs
  class JsonConfigurationProvider (line 15) | public class JsonConfigurationProvider : FileConfigurationProvider
    method JsonConfigurationProvider (line 21) | public JsonConfigurationProvider(JsonConfigurationSource source) : bas...
    method Load (line 27) | public override void Load(Stream stream)
    method RetrieveErrorContext (line 52) | private static string RetrieveErrorContext(JsonReaderException e, IEnu...
    method ReadLines (line 72) | private static IEnumerable<string> ReadLines(StreamReader streamReader)

FILE: src/Config.Json/JsonConfigurationSource.cs
  class JsonConfigurationSource (line 11) | public class JsonConfigurationSource : FileConfigurationSource
    method Build (line 18) | public override IConfigurationProvider Build(IConfigurationBuilder bui...

FILE: src/Config.Json/Properties/Resources.Designer.cs
  class Resources (line 8) | internal static class Resources
    method FormatError_InvalidFilePath (line 24) | internal static string FormatError_InvalidFilePath()
    method FormatError_JSONParseError (line 38) | internal static string FormatError_JSONParseError(object p0, object p1)
    method FormatError_KeyIsDuplicated (line 52) | internal static string FormatError_KeyIsDuplicated(object p0)
    method FormatError_UnsupportedJSONToken (line 66) | internal static string FormatError_UnsupportedJSONToken(object p0, obj...
    method GetString (line 69) | private static string GetString(string name, params string[] formatter...

FILE: src/Config.KeyPerFile/KeyPerFileConfigurationBuilderExtensions.cs
  class KeyPerFileConfigurationBuilderExtensions (line 11) | public static class KeyPerFileConfigurationBuilderExtensions
    method AddKeyPerFile (line 21) | public static IConfigurationBuilder AddKeyPerFile(this IConfigurationB...
    method AddKeyPerFile (line 39) | public static IConfigurationBuilder AddKeyPerFile(this IConfigurationB...

FILE: src/Config.KeyPerFile/KeyPerFileConfigurationProvider.cs
  class KeyPerFileConfigurationProvider (line 10) | public class KeyPerFileConfigurationProvider : ConfigurationProvider
    method KeyPerFileConfigurationProvider (line 18) | public KeyPerFileConfigurationProvider(KeyPerFileConfigurationSource s...
    method NormalizeKey (line 21) | private static string NormalizeKey(string key)
    method TrimNewLine (line 24) | private static string TrimNewLine(string value)
    method Load (line 32) | public override void Load()

FILE: src/Config.KeyPerFile/KeyPerFileConfigurationSource.cs
  class KeyPerFileConfigurationSource (line 10) | public class KeyPerFileConfigurationSource : IConfigurationSource
    method KeyPerFileConfigurationSource (line 15) | public KeyPerFileConfigurationSource()
    method Build (line 45) | public IConfigurationProvider Build(IConfigurationBuilder builder)

FILE: src/Config.UserSecrets/PathHelper.cs
  class PathHelper (line 12) | public class PathHelper
    method GetSecretsPathFromSecretsId (line 26) | public static string GetSecretsPathFromSecretsId(string userSecretsId)

FILE: src/Config.UserSecrets/Properties/Resources.Designer.cs
  class Resources (line 8) | internal static class Resources
    method FormatCommon_StringNullOrEmpty (line 24) | internal static string FormatCommon_StringNullOrEmpty()
    method FormatError_Invalid_Character_In_UserSecrets_Id (line 38) | internal static string FormatError_Invalid_Character_In_UserSecrets_Id...
    method FormatError_Missing_UserSecretsIdAttribute (line 56) | internal static string FormatError_Missing_UserSecretsIdAttribute(obje...
    method GetString (line 59) | private static string GetString(string name, params string[] formatter...

FILE: src/Config.UserSecrets/UserSecretsConfigurationExtensions.cs
  class UserSecretsConfigurationExtensions (line 15) | public static class UserSecretsConfigurationExtensions
    method AddUserSecrets (line 30) | public static IConfigurationBuilder AddUserSecrets<T>(this IConfigurat...
    method AddUserSecrets (line 48) | public static IConfigurationBuilder AddUserSecrets<T>(this IConfigurat...
    method AddUserSecrets (line 65) | public static IConfigurationBuilder AddUserSecrets(this IConfiguration...
    method AddUserSecrets (line 82) | public static IConfigurationBuilder AddUserSecrets(this IConfiguration...
    method AddUserSecrets (line 119) | public static IConfigurationBuilder AddUserSecrets(this IConfiguration...
    method AddSecretsFile (line 134) | private static IConfigurationBuilder AddSecretsFile(IConfigurationBuil...

FILE: src/Config.UserSecrets/UserSecretsIdAttribute.cs
  class UserSecretsIdAttribute (line 18) | [AttributeUsage(AttributeTargets.Assembly, Inherited = false, AllowMulti...
    method UserSecretsIdAttribute (line 25) | public UserSecretsIdAttribute(string userSecretId)

FILE: src/Config.Xml/Properties/Resources.Designer.cs
  class Resources (line 8) | internal static class Resources
    method FormatError_InvalidFilePath (line 24) | internal static string FormatError_InvalidFilePath()
    method FormatError_KeyIsDuplicated (line 38) | internal static string FormatError_KeyIsDuplicated(object p0, object p1)
    method FormatError_NamespaceIsNotSupported (line 52) | internal static string FormatError_NamespaceIsNotSupported(object p0)
    method FormatError_UnsupportedNodeType (line 66) | internal static string FormatError_UnsupportedNodeType(object p0, obje...
    method FormatMsg_LineInfo (line 80) | internal static string FormatMsg_LineInfo(object p0, object p1)
    method GetString (line 83) | private static string GetString(string name, params string[] formatter...

FILE: src/Config.Xml/XmlConfigurationExtensions.cs
  class XmlConfigurationExtensions (line 14) | public static class XmlConfigurationExtensions
    method AddXmlFile (line 23) | public static IConfigurationBuilder AddXmlFile(this IConfigurationBuil...
    method AddXmlFile (line 36) | public static IConfigurationBuilder AddXmlFile(this IConfigurationBuil...
    method AddXmlFile (line 50) | public static IConfigurationBuilder AddXmlFile(this IConfigurationBuil...
    method AddXmlFile (line 65) | public static IConfigurationBuilder AddXmlFile(this IConfigurationBuil...
    method AddXmlFile (line 92) | public static IConfigurationBuilder AddXmlFile(this IConfigurationBuil...

FILE: src/Config.Xml/XmlConfigurationProvider.cs
  class XmlConfigurationProvider (line 15) | public class XmlConfigurationProvider : FileConfigurationProvider
    method XmlConfigurationProvider (line 23) | public XmlConfigurationProvider(XmlConfigurationSource source) : base(...
    method Load (line 31) | public override void Load(Stream stream)
    method SkipUntilRootElement (line 124) | private void SkipUntilRootElement(XmlReader reader)
    method GetLineInfo (line 136) | private static string GetLineInfo(XmlReader reader)
    method ProcessAttributes (line 143) | private void ProcessAttributes(XmlReader reader, Stack<string> prefixS...
    method AddNamePrefix (line 165) | private static void AddNamePrefix(XmlReader reader, Stack<string> pref...
    method AddAttributePair (line 187) | private static void AddAttributePair(XmlReader reader, Stack<string> p...

FILE: src/Config.Xml/XmlConfigurationSource.cs
  class XmlConfigurationSource (line 9) | public class XmlConfigurationSource : FileConfigurationSource
    method Build (line 16) | public override IConfigurationProvider Build(IConfigurationBuilder bui...

FILE: src/Config.Xml/XmlDocumentDecryptor.cs
  class XmlDocumentDecryptor (line 14) | public class XmlDocumentDecryptor
    method XmlDocumentDecryptor (line 27) | protected XmlDocumentDecryptor()
    method XmlDocumentDecryptor (line 33) | internal XmlDocumentDecryptor(Func<XmlDocument, EncryptedXml> encrypte...
    method ContainsEncryptedData (line 38) | private static bool ContainsEncryptedData(XmlDocument document)
    method CreateDecryptingXmlReader (line 52) | public XmlReader CreateDecryptingXmlReader(Stream input, XmlReaderSett...
    method DecryptDocumentAndCreateXmlReader (line 85) | protected virtual XmlReader DecryptDocumentAndCreateXmlReader(XmlDocum...
    method DefaultEncryptedXmlFactory (line 97) | private static EncryptedXml DefaultEncryptedXmlFactory(XmlDocument doc...

FILE: src/Config/ChainedBuilderExtensions.cs
  class ChainedBuilderExtensions (line 12) | public static class ChainedBuilderExtensions
    method AddConfiguration (line 20) | public static IConfigurationBuilder AddConfiguration(this IConfigurati...

FILE: src/Config/ChainedConfigurationProvider.cs
  class ChainedConfigurationProvider (line 14) | public class ChainedConfigurationProvider : IConfigurationProvider
    method ChainedConfigurationProvider (line 22) | public ChainedConfigurationProvider(ChainedConfigurationSource source)
    method TryGet (line 42) | public bool TryGet(string key, out string value)
    method Set (line 53) | public void Set(string key, string value) => _config[key] = value;
    method GetReloadToken (line 59) | public IChangeToken GetReloadToken() => _config.GetReloadToken();
    method Load (line 64) | public void Load() { }
    method GetChildKeys (line 74) | public IEnumerable<string> GetChildKeys(

FILE: src/Config/ChainedConfigurationSource.cs
  class ChainedConfigurationSource (line 9) | public class ChainedConfigurationSource : IConfigurationSource
    method Build (line 21) | public IConfigurationProvider Build(IConfigurationBuilder builder)

FILE: src/Config/ConfigurationBuilder.cs
  class ConfigurationBuilder (line 12) | public class ConfigurationBuilder : IConfigurationBuilder
    method Add (line 30) | public IConfigurationBuilder Add(IConfigurationSource source)
    method Build (line 46) | public IConfigurationRoot Build()

FILE: src/Config/ConfigurationKeyComparer.cs
  class ConfigurationKeyComparer (line 12) | public class ConfigurationKeyComparer : IComparer<string>
    method Compare (line 27) | public int Compare(string x, string y)

FILE: src/Config/ConfigurationProvider.cs
  class ConfigurationProvider (line 15) | public abstract class ConfigurationProvider : IConfigurationProvider
    method ConfigurationProvider (line 22) | protected ConfigurationProvider()
    method TryGet (line 38) | public virtual bool TryGet(string key, out string value)
    method Set (line 46) | public virtual void Set(string key, string value)
    method Load (line 52) | public virtual void Load()
    method GetChildKeys (line 61) | public virtual IEnumerable<string> GetChildKeys(
    method Segment (line 74) | private static string Segment(string key, int prefixLength)
    method GetReloadToken (line 84) | public IChangeToken GetReloadToken()
    method OnReload (line 92) | protected void OnReload()

FILE: src/Config/ConfigurationReloadToken.cs
  class ConfigurationReloadToken (line 13) | public class ConfigurationReloadToken : IChangeToken
    method RegisterChangeCallback (line 34) | public IDisposable RegisterChangeCallback(Action<object> callback, obj...
    method OnReload (line 39) | public void OnReload() => _cts.Cancel();

FILE: src/Config/ConfigurationRoot.cs
  class ConfigurationRoot (line 15) | public class ConfigurationRoot : IConfigurationRoot
    method ConfigurationRoot (line 24) | public ConfigurationRoot(IList<IConfigurationProvider> providers)
    method GetChildren (line 84) | public IEnumerable<IConfigurationSection> GetChildren() => GetChildren...
    method GetChildrenImplementation (line 86) | internal IEnumerable<IConfigurationSection> GetChildrenImplementation(...
    method GetReloadToken (line 99) | public IChangeToken GetReloadToken() => _changeToken;
    method GetSection (line 110) | public IConfigurationSection GetSection(string key)
    method Reload (line 116) | public void Reload()
    method RaiseChanged (line 125) | private void RaiseChanged()

FILE: src/Config/ConfigurationSection.cs
  class ConfigurationSection (line 13) | public class ConfigurationSection : IConfigurationSection
    method ConfigurationSection (line 24) | public ConfigurationSection(ConfigurationRoot root, string path)
    method GetSection (line 103) | public IConfigurationSection GetSection(string key) => _root.GetSectio...
    method GetChildren (line 109) | public IEnumerable<IConfigurationSection> GetChildren() => _root.GetCh...
    method GetReloadToken (line 115) | public IChangeToken GetReloadToken() => _root.GetReloadToken();

FILE: src/Config/MemoryConfigurationBuilderExtensions.cs
  class MemoryConfigurationBuilderExtensions (line 13) | public static class MemoryConfigurationBuilderExtensions
    method AddInMemoryCollection (line 20) | public static IConfigurationBuilder AddInMemoryCollection(this IConfig...
    method AddInMemoryCollection (line 37) | public static IConfigurationBuilder AddInMemoryCollection(

FILE: src/Config/MemoryConfigurationProvider.cs
  class MemoryConfigurationProvider (line 13) | public class MemoryConfigurationProvider : ConfigurationProvider, IEnume...
    method MemoryConfigurationProvider (line 21) | public MemoryConfigurationProvider(MemoryConfigurationSource source)
    method Add (line 44) | public void Add(string key, string value)
    method GetEnumerator (line 53) | public IEnumerator<KeyValuePair<string, string>> GetEnumerator()
    method GetEnumerator (line 62) | IEnumerator IEnumerable.GetEnumerator()

FILE: src/Config/MemoryConfigurationSource.cs
  class MemoryConfigurationSource (line 11) | public class MemoryConfigurationSource : IConfigurationSource
    method Build (line 23) | public IConfigurationProvider Build(IConfigurationBuilder builder)

FILE: src/Config/Properties/Resources.Designer.cs
  class Resources (line 8) | internal static class Resources
    method FormatError_NoSources (line 24) | internal static string FormatError_NoSources()
    method GetString (line 27) | private static string GetString(string name, params string[] formatter...

FILE: test/Config.AzureKeyVault.Test/AzureKeyVaultConfigurationTest.cs
  class AzureKeyVaultConfigurationTest (line 18) | public class AzureKeyVaultConfigurationTest
    method LoadsAllSecretsFromVault (line 22) | [Fact]
    method DoesNotLoadFilteredItems (line 56) | [Fact]
    method DoesNotLoadDisabledItems (line 82) | [Fact]
    method SupportsReload (line 124) | [Fact]
    method ReplaceDoubleMinusInKeyName (line 150) | [Fact]
    method ConstructorThrowsForNullManager (line 173) | [Fact]
    method GetSecretId (line 179) | private string GetSecretId(string name) => new SecretIdentifier(VaultU...
    class EndsWithOneKeyVaultSecretManager (line 181) | private class EndsWithOneKeyVaultSecretManager : DefaultKeyVaultSecret...
      method Load (line 183) | public override bool Load(SecretItem secret)
    class PageMock (line 189) | private class PageMock: IPage<SecretItem>
      method GetEnumerator (line 193) | public IEnumerator<SecretItem> GetEnumerator()
      method GetEnumerator (line 198) | IEnumerator IEnumerable.GetEnumerator()

FILE: test/Config.Binder.Test/ConfigurationBinderTests.cs
  class ConfigurationBinderTests (line 12) | public class ConfigurationBinderTests
    class ComplexOptions (line 14) | public class ComplexOptions
      method ComplexOptions (line 16) | public ComplexOptions()
    class NestedOptions (line 49) | public class NestedOptions
    class DerivedOptions (line 54) | public class DerivedOptions : ComplexOptions
    class NullableOptions (line 69) | public class NullableOptions
    class EnumOptions (line 76) | public class EnumOptions
    class GenericOptions (line 81) | public class GenericOptions<T>
    class ConfigurationInterfaceOptions (line 86) | public class ConfigurationInterfaceOptions
    class DerivedOptionsWithIConfigurationSection (line 91) | public class DerivedOptionsWithIConfigurationSection : DerivedOptions
    method CanBindIConfigurationSection (line 96) | [Fact]
    method CanBindWithKeyOverload (line 124) | [Fact]
    method CanBindIConfigurationSectionWithDerivedOptionsSection (line 147) | [Fact]
    method EmptyStringIsNullable (line 183) | [Fact]
    method GetScalarNullable (line 198) | [Fact]
    method CanBindToObjectProperty (line 216) | [Fact]
    method GetNullValue (line 233) | [Fact]
    method GetDefaultsWhenDataDoesNotExist (line 257) | [Fact]
    method GetUri (line 278) | [Fact]
    method CanReadAllSupportedTypes (line 294) | [Theory]
    method ConsistentExceptionOnFailedBinding (line 342) | [Theory]
    method BinderIgnoresIndexerProperties (line 400) | [Fact]
    method BindCanReadComplexProperties (line 408) | [Fact]
    method GetCanReadComplexProperties (line 429) | [Fact]
    method BindCanReadInheritedProperties (line 450) | [Fact]
    method GetCanReadInheritedProperties (line 473) | [Fact]
    method GetCanReadStaticProperty (line 496) | [Fact]
    method BindCanReadStaticProperty (line 512) | [Fact]
    method CanGetComplexOptionsWhichHasAlsoHasValue (line 529) | [Fact]
    method GetIgnoresTests (line 550) | [Theory]
    method GetCanSetNonPublicWhenSet (line 573) | [Theory]
    method NonPublicModeGetStillIgnoresReadonly (line 595) | [Theory]
    method BindIgnoresTests (line 613) | [Theory]
    method BindCanSetNonPublicWhenSet (line 638) | [Theory]
    method NonPublicModeBindStillIgnoresReadonly (line 661) | [Theory]
    method ExceptionWhenTryingToBindToInterface (line 680) | [Fact]
    method ExceptionWhenTryingToBindClassWithoutParameterlessConstructor (line 699) | [Fact]
    method ExceptionWhenTryingToBindToTypeThrowsWhenActivated (line 718) | [Fact]
    method ExceptionIncludesKeyOfFailedBinding (line 738) | [Fact]
    type ISomeInterface (line 757) | private interface ISomeInterface
    class ClassWithoutPublicConstructor (line 761) | private class ClassWithoutPublicConstructor
      method ClassWithoutPublicConstructor (line 763) | private ClassWithoutPublicConstructor()
    class ThrowsWhenActivated (line 768) | private class ThrowsWhenActivated
      method ThrowsWhenActivated (line 770) | public ThrowsWhenActivated()
    class NestedOptions1 (line 776) | private class NestedOptions1
    class NestedOptions2 (line 781) | private class NestedOptions2
    class TestOptions (line 786) | private class TestOptions

FILE: test/Config.Binder.Test/ConfigurationCollectionBindingTests.cs
  class ConfigurationCollectionBinding (line 11) | public class ConfigurationCollectionBinding
    method GetList (line 13) | [Fact]
    method GetListNullValues (line 38) | [Fact]
    method GetListInvalidValues (line 58) | [Fact]
    method BindList (line 77) | [Fact]
    method GetObjectList (line 103) | [Fact]
    method GetStringDictionary (line 127) | [Fact]
    method GetEnumDictionary (line 151) | [Fact]
    method GetStringList (line 175) | [Fact]
    method BindStringList (line 202) | [Fact]
    method GetIntList (line 229) | [Fact]
    method BindIntList (line 257) | [Fact]
    method AlreadyInitializedListBinding (line 285) | [Fact]
    method AlreadyInitializedListInterfaceBinding (line 314) | [Fact]
    method CustomListBinding (line 343) | [Fact]
    method ObjectListBinding (line 371) | [Fact]
    method NestedListsBinding (line 395) | [Fact]
    method StringDictionaryBinding (line 425) | [Fact]
    method AlreadyInitializedStringDictionaryBinding (line 449) | [Fact]
    method CanOverrideExistingDictionaryKey (line 475) | [Fact]
    method IntDictionaryBinding (line 500) | [Fact]
    method ObjectDictionary (line 524) | [Fact]
    method ListDictionary (line 548) | [Fact]
    method ListInNestedOptionBinding (line 578) | [Fact]
    method NonStringKeyDictionaryBinding (line 608) | [Fact]
    method GetStringArray (line 628) | [Fact]
    method BindStringArray (line 657) | [Fact]
    method GetAlreadyInitializedArray (line 685) | [Fact]
    method BindAlreadyInitializedArray (line 715) | [Fact]
    method ArrayInNestedOptionBinding (line 746) | [Fact]
    method UnsupportedMultidimensionalArrays (line 775) | [Fact]
    method JaggedArrayBinding (line 796) | [Fact]
    method CanBindUninitializedIEnumerable (line 825) | [Fact]
    method CanBindUninitializedICollection (line 853) | [Fact]
    method CanBindUninitializedIReadOnlyCollection (line 881) | [Fact]
    method CanBindUninitializedIReadOnlyList (line 909) | [Fact]
    method CanBindUninitializedIDictionary (line 937) | [Fact]
    method CanBindUninitializedIReadOnlyDictionary (line 961) | [Fact]
    class UnintializedCollectionsOptions (line 985) | private class UnintializedCollectionsOptions
    class CustomList (line 996) | private class CustomList : List<string>
      method Add (line 999) | public void Add(string a, string b)
    class CustomDictionary (line 1004) | private class CustomDictionary<T> : Dictionary<string, T>
    class NestedOptions (line 1008) | private class NestedOptions
    type KeyEnum (line 1017) | private enum KeyEnum
    class OptionsWithArrays (line 1024) | private class OptionsWithArrays
      method OptionsWithArrays (line 1028) | public OptionsWithArrays()
    class OptionsWithLists (line 1045) | private class OptionsWithLists
      method OptionsWithLists (line 1047) | public OptionsWithLists()
    class OptionsWithDictionary (line 1078) | private class OptionsWithDictionary
      method OptionsWithDictionary (line 1080) | public OptionsWithDictionary()

FILE: test/Config.CommandLine.Test/CommandLineTest.cs
  class CommandLineTest (line 12) | public class CommandLineTest
    method IgnoresOnlyUnknownArgs (line 14) | [Fact]
    method CanIgnoreValuesInMiddle (line 28) | [Fact]
    method LoadKeyValuePairsFromCommandLineArgumentsWithoutSwitchMappings (line 55) | [Fact]
    method LoadKeyValuePairsFromCommandLineArgumentsWithSwitchMappings (line 77) | [Fact]
    method ThrowExceptionWhenPassingSwitchMappingsWithDuplicatedKeys (line 107) | [Fact]
    method ThrowExceptionWhenSwitchMappingsContainInvalidKey (line 152) | [Fact]
    method ThrowExceptionWhenNullIsPassedToConstructorAsArgs (line 178) | [Fact]
    method OverrideValueWhenKeyIsDuplicated (line 189) | [Fact]
    method IgnoreWhenValueForAKeyIsMissing (line 204) | [Fact]
    method IgnoreWhenAnArgumentCannotBeRecognized (line 219) | [Fact]
    method IgnoreWhenShortSwitchNotDefined (line 231) | [Fact]

FILE: test/Config.EnvironmentVariables.Test/EnvironmentVariablesTest.cs
  class EnvironmentVariablesTest (line 11) | public class EnvironmentVariablesTest
    method LoadKeyValuePairsFromEnvironmentDictionary (line 13) | [Fact]
    method LoadKeyValuePairsFromEnvironmentDictionaryWithPrefix (line 33) | [Fact]
    method LoadKeyValuePairsFromAzureEnvironment (line 51) | [Fact]
    method LoadKeyValuePairsFromAzureEnvironmentWithPrefix (line 80) | [Fact]
    method LastVariableAddedWhenKeyIsDuplicatedInAzureEnvironment (line 104) | [Fact]
    method LastVariableAddedWhenMultipleEnvironmentVariablesWithSameNameButDifferentCaseExist (line 120) | [Fact]
    method ReplaceDoubleUnderscoreInEnvironmentVariables (line 137) | [Fact]

FILE: test/Config.FileExtensions.Test/FileConfigurationBuilderExtensionsTest.cs
  class FileConfigurationBuilderExtensionsTest (line 11) | public class FileConfigurationBuilderExtensionsTest
    method SetFileProvider_ThrowsIfBasePathIsNull (line 13) | [Fact]
    method SetFileProvider_CheckPropertiesValueOnBuilder (line 24) | [Fact]
    method GetFileProvider_ReturnPhysicalProviderWithBaseDirectoryIfNotSet (line 36) | [Fact]
    method EnsureTrailingSlash (line 53) | private static string EnsureTrailingSlash(string path)

FILE: test/Config.FunctionalTests/ArrayTests.cs
  class ArrayTests (line 11) | public class ArrayTests : IDisposable
    method DifferentConfigSources_Merged_KeysAreSorted (line 49) | [Fact]
    method DifferentConfigSources_Merged_WithOverwrites (line 77) | [Fact]
    method BuildConfig (line 92) | private IConfiguration BuildConfig()
    method ArrayTests (line 102) | public ArrayTests()
    method Dispose (line 116) | public void Dispose()

FILE: test/Config.FunctionalTests/ConfigurationTests.cs
  class ConfigurationTests (line 20) | public class ConfigurationTests : IDisposable
    method ConfigurationTests (line 78) | public ConfigurationTests()
    method MissingFileIncludesAbsolutePathIfPhysicalFileProvider (line 89) | [Fact]
    class NotVeryGoodFileProvider (line 100) | private class NotVeryGoodFileProvider : IFileProvider
      method GetDirectoryContents (line 102) | public IDirectoryContents GetDirectoryContents(string subpath)
      method GetFileInfo (line 107) | public IFileInfo GetFileInfo(string subpath)
      method Watch (line 112) | public IChangeToken Watch(string filter)
    class MissingFile (line 118) | private class MissingFile : IFileInfo
      method CreateReadStream (line 168) | public Stream CreateReadStream()
    class AlwaysMissingFileProvider (line 174) | private class AlwaysMissingFileProvider : IFileProvider
      method GetDirectoryContents (line 176) | public IDirectoryContents GetDirectoryContents(string subpath)
      method GetFileInfo (line 181) | public IFileInfo GetFileInfo(string subpath)
      method Watch (line 186) | public IChangeToken Watch(string filter)
    method WriteTestFiles (line 192) | private void WriteTestFiles()
    method CreateBuilder (line 199) | private IConfigurationBuilder CreateBuilder()
    method MissingFileDoesNotIncludesAbsolutePathIfWithNullFileInfo (line 204) | [Fact]
    method MissingFileDoesNotIncludesAbsolutePathIfWithNoPhysicalPath (line 216) | [Fact]
    method LoadAndCombineKeyValuePairsFromDifferentConfigurationProviders (line 228) | [Fact]
    method LoadAndCombineKeyValuePairsFromDifferentConfigurationProvidersWithAbsolutePath (line 270) | [Fact]
    method CanOverrideValuesWithNewConfigurationProvider (line 313) | [Fact]
    method BuildConfig (line 338) | private IConfigurationRoot BuildConfig()
    class TestIniSourceProvider (line 347) | public class TestIniSourceProvider : IniConfigurationProvider, IConfig...
      method TestIniSourceProvider (line 349) | public TestIniSourceProvider(string path)
      method Build (line 353) | public IConfigurationProvider Build(IConfigurationBuilder builder)
    class TestJsonSourceProvider (line 360) | public class TestJsonSourceProvider : JsonConfigurationProvider, IConf...
      method TestJsonSourceProvider (line 362) | public TestJsonSourceProvider(string path)
      method Build (line 366) | public IConfigurationProvider Build(IConfigurationBuilder builder)
    class TestXmlSourceProvider (line 373) | public class TestXmlSourceProvider : XmlConfigurationProvider, IConfig...
      method TestXmlSourceProvider (line 375) | public TestXmlSourceProvider(string path)
      method Build (line 379) | public IConfigurationProvider Build(IConfigurationBuilder builder)
    method OnLoadErrorWillBeCalledOnJsonParseError (line 386) | [Fact]
    method OnLoadErrorWillBeCalledOnXmlParseError (line 413) | [Fact]
    method OnLoadErrorWillBeCalledOnIniLoadError (line 440) | [Fact]
    method OnLoadErrorCanIgnoreErrors (line 468) | [Fact]
    method CanSetValuesAndReloadValues (line 492) | [Fact]
    method ReloadOnChangeWorksAfterError (line 535) | [Fact]
    method TouchingFileWillReload (line 569) | [Fact]
    method CreatingOptionalFileInNonExistentDirectoryWillReload (line 603) | [Fact]
    method DeletingFilesThatRedefineKeysWithReload (line 632) | [Theory]
    method DeletingFileWillReload (line 690) | [Theory]
    method CreatingWritingDeletingCreatingFileWillReload (line 726) | [Fact]
    method LoadIncorrectJsonFile_ThrowFormatException (line 795) | [Fact]
    method SetBasePathCalledMultipleTimesForEachSourceLastOneWins (line 813) | [Fact]
    method GetDefaultBasePathForSources (line 845) | [Fact]
    method CanEnumerateProviders (line 877) | [Fact]
    method Dispose (line 894) | public void Dispose()

FILE: test/Config.FunctionalTests/DisposableFileSystem.cs
  class DisposableFileSystem (line 9) | public class DisposableFileSystem : IDisposable
    method DisposableFileSystem (line 11) | public DisposableFileSystem()
    method CreateFolder (line 22) | public DisposableFileSystem CreateFolder(string path)
    method WriteFile (line 28) | public DisposableFileSystem WriteFile(string path, string text = "temp")
    method DeleteFile (line 34) | public DisposableFileSystem DeleteFile(string path)
    method CreateFiles (line 40) | public DisposableFileSystem CreateFiles(params string[] fileRelativePa...
    method Dispose (line 55) | public void Dispose()

FILE: test/Config.Ini.Test/IniConfigurationExtensionsTest.cs
  class IniConfigurationExtensionsTest (line 10) | public class IniConfigurationExtensionsTest
    method AddIniFile_ThrowsIfFilePathIsNullOrEmpty (line 12) | [Theory]
    method AddIniFile_ThrowsIfFileDoesNotExistAtPath (line 27) | [Fact]
    method AddIniFile_DoesNotThrowsIfFileDoesNotExistAtPathAndOptional (line 38) | [Fact]

FILE: test/Config.Ini.Test/IniConfigurationTest.cs
  class IniConfigurationTest (line 11) | public class IniConfigurationTest
    method LoadKeyValuePairsFromValidIniFile (line 13) | [Fact]
    method LoadMethodCanHandleEmptyValue (line 32) | [Fact]
    method LoadKeyValuePairsFromValidIniFileWithQuotedValues (line 43) | [Fact]
    method DoubleQuoteIsPartOfValueIfNotPaired (line 62) | [Fact]
    method DoubleQuoteIsPartOfValueIfAppearInTheMiddleOfValue (line 76) | [Fact]
    method LoadKeyValuePairsFromValidIniFileWithoutSectionHeader (line 90) | [Fact]
    method SupportAndIgnoreComments (line 109) | [Fact]
    method ThrowExceptionWhenFoundInvalidLine (line 133) | [Fact]
    method ThrowExceptionWhenFoundBrokenSectionHeader (line 147) | [Fact]
    method ThrowExceptionWhenPassingNullAsFilePath (line 162) | [Fact]
    method ThrowExceptionWhenPassingEmptyStringAsFilePath (line 172) | [Fact]
    method ThrowExceptionWhenKeyIsDuplicated (line 182) | [Fact]
    method IniConfiguration_Throws_On_Missing_Configuration_File (line 201) | [Fact]
    method IniConfiguration_Does_Not_Throw_On_Optional_Configuration (line 210) | [Fact]

FILE: test/Config.Json.Test/ArrayTest.cs
  class ArrayTest (line 10) | public class ArrayTest
    method ArraysAreConvertedToKeyValuePairs (line 12) | [Fact]
    method ArrayOfObjects (line 31) | [Fact]
    method NestedArrays (line 56) | [Fact]
    method ImplicitArrayItemReplacement (line 81) | [Fact]
    method ExplicitArrayReplacement (line 112) | [Fact]
    method ArrayMerge (line 143) | [Fact]
    method ArraysAreKeptInFileOrder (line 175) | [Fact]
    method PropertiesAreSortedByNumberOnlyFirst (line 201) | [Fact]

FILE: test/Config.Json.Test/JsonConfigurationExtensionsTest.cs
  class JsonConfigurationExtensionsTest (line 10) | public class JsonConfigurationExtensionsTest
    method AddJsonFile_ThrowsIfFilePathIsNullOrEmpty (line 12) | [Theory]
    method AddJsonFile_ThrowsIfFileDoesNotExistAtPath (line 26) | [Fact]

FILE: test/Config.Json.Test/JsonConfigurationTest.cs
  class JsonConfigurationTest (line 13) | public class JsonConfigurationTest
    method LoadProvider (line 15) | private JsonConfigurationProvider LoadProvider(string json)
    method LoadKeyValuePairsFromValidJson (line 22) | [Fact]
    method LoadMethodCanHandleEmptyValue (line 42) | [Fact]
    method LoadWithCulture (line 53) | [Fact]
    method NonObjectRootIsInvalid (line 75) | [Fact]
    method SupportAndIgnoreComments (line 86) | [Fact]
    method ThrowExceptionWhenUnexpectedEndFoundBeforeFinishParsing (line 103) | [Fact]
    method ThrowExceptionWhenMissingCurlyBeforeFinishParsing (line 117) | [Fact]
    method ThrowExceptionWhenPassingNullAsFilePath (line 129) | [Fact]
    method ThrowExceptionWhenPassingEmptyStringAsFilePath (line 139) | [Fact]
    method JsonConfiguration_Throws_On_Missing_Configuration_File (line 149) | [Fact]
    method JsonConfiguration_Does_Not_Throw_On_Optional_Configuration (line 159) | [Fact]
    method ThrowFormatExceptionWhenFileIsEmpty (line 165) | [Fact]

FILE: test/Config.KeyPerFile.Test/KeyPerFileTests.cs
  class KeyPerFileTests (line 13) | public class KeyPerFileTests
    method DoesNotThrowWhenOptionalAndNoSecrets (line 15) | [Fact]
    method DoesNotThrowWhenOptionalAndDirectoryDoesntExist (line 21) | [Fact]
    method ThrowsWhenNotOptionalAndDirectoryDoesntExist (line 27) | [Fact]
    method CanLoadMultipleSecrets (line 34) | [Fact]
    method CanLoadMultipleSecretsWithDirectory (line 49) | [Fact]
    method CanLoadNestedKeys (line 65) | [Fact]
    method CanIgnoreFilesWithDefault (line 82) | [Fact]
    method CanTurnOffDefaultIgnorePrefixWithCondition (line 99) | [Fact]
    method CanIgnoreAllWithCondition (line 120) | [Fact]
    method CanIgnoreFilesWithCustomIgnore (line 139) | [Fact]
    method CanUnIgnoreDefaultFiles (line 160) | [Fact]
  class TestFileProvider (line 182) | class TestFileProvider : IFileProvider
    method TestFileProvider (line 186) | public TestFileProvider(params IFileInfo[] files)
    method GetDirectoryContents (line 191) | public IDirectoryContents GetDirectoryContents(string subpath)
    method GetFileInfo (line 196) | public IFileInfo GetFileInfo(string subpath)
    method Watch (line 201) | public IChangeToken Watch(string filter)
  class TestDirectoryContents (line 207) | class TestDirectoryContents : IDirectoryContents
    method TestDirectoryContents (line 211) | public TestDirectoryContents(params IFileInfo[] files)
    method GetEnumerator (line 224) | public IEnumerator<IFileInfo> GetEnumerator()
    method GetEnumerator (line 229) | IEnumerator IEnumerable.GetEnumerator()
  class TestFile (line 236) | class TestFile : IFileInfo
    method TestFile (line 286) | public TestFile(string name)
    method TestFile (line 292) | public TestFile(string name, string contents)
    method CreateReadStream (line 298) | public Stream CreateReadStream()

FILE: test/Config.Test.Common/ConfigurationProviderExtensions.cs
  class ConfigurationProviderExtensions (line 8) | public static class ConfigurationProviderExtensions
    method Get (line 10) | public static string Get(this IConfigurationProvider provider, string ...

FILE: test/Config.Test.Common/TestStreamHelpers.cs
  class TestStreamHelpers (line 11) | public static class TestStreamHelpers
    method StringToFileProvider (line 15) | public static IFileProvider StringToFileProvider(string str)
    class TestFile (line 21) | private class TestFile : IFileInfo
      method TestFile (line 25) | public TestFile(string str)
      method CreateReadStream (line 78) | public Stream CreateReadStream()
    class TestFileProvider (line 84) | private class TestFileProvider : IFileProvider
      method TestFileProvider (line 87) | public TestFileProvider(string str)
      method GetDirectoryContents (line 92) | public IDirectoryContents GetDirectoryContents(string subpath)
      method GetFileInfo (line 97) | public IFileInfo GetFileInfo(string subpath)
      method Watch (line 102) | public IChangeToken Watch(string filter)
    method StringToStream (line 108) | public static Stream StringToStream(string str)
    method StreamToString (line 119) | public static string StreamToString(Stream stream)

FILE: test/Config.Test/ConfigurationPathComparerTest.cs
  class ConfigurationPathComparerTest (line 9) | public class ConfigurationPathComparerTest
    method CompareWithNull (line 11) | [Fact]
    method CompareWithSameLength (line 19) | [Fact]
    method CompareWithDifferentLengths (line 28) | [Fact]
    method CompareWithLetters (line 35) | [Fact]
    method CompareWithNumbers (line 42) | [Fact]
    method CompareWithNumbersAndLetters (line 57) | [Fact]
    method CompareWithNonNumbers (line 67) | [Fact]
    method CompareIdenticalPaths (line 83) | [Fact]
    method CompareDifferentPaths (line 89) | [Fact]
    method ComparePathsWithCommonPart (line 96) | [Fact]
    method ComparePathsWithCommonPartButShorter (line 103) | [Fact]
    method ComparePathsWithIndicesAtTheEnd (line 110) | [Fact]
    method ComparePathsWithIndicesInside (line 120) | [Fact]
    method ComparerTest (line 130) | private static void ComparerTest(string a, string b, int expectedSign)

FILE: test/Config.Test/ConfigurationPathTest.cs
  class ConfigurationPathTest (line 9) | public class ConfigurationPathTest
    method CombineWithEmptySegmentLeavesDelimiter (line 11) | [Fact]
    method GetLastSegmenGetSectionKeyTests (line 19) | [Fact]
    method GetParentPathTests (line 33) | [Fact]

FILE: test/Config.Test/ConfigurationTest.cs
  class ConfigurationTest (line 12) | public class ConfigurationTest
    method LoadAndCombineKeyValuePairsFromDifferentConfigurationProviders (line 14) | [Fact]
    method CanChainConfiguration (line 62) | [Fact]
    method ChainedAsEnumerateFlattensIntoDictionaryTest (line 105) | [Theory]
    method AsEnumerateFlattensIntoDictionaryTest (line 161) | [Theory]
    method AsEnumerateStripsKeyFromChildren (line 215) | [Fact]
    method NewConfigurationProviderOverridesOldOneWhenKeyIsDuplicated (line 277) | [Fact]
    class TestMemorySourceProvider (line 304) | public class TestMemorySourceProvider : MemoryConfigurationProvider, I...
      method TestMemorySourceProvider (line 306) | public TestMemorySourceProvider(Dictionary<string, string> initialData)
      method Build (line 310) | public IConfigurationProvider Build(IConfigurationBuilder builder)
    method SettingValueUpdatesAllConfigurationProviders (line 316) | [Fact]
    method CanGetConfigurationSection (line 357) | [Fact]
    method CanGetConnectionStrings (line 406) | [Fact]
    method CanGetConfigurationChildren (line 439) | [Fact]
    method SourcesReturnsAddedConfigurationProviders (line 479) | [Fact]
    method SetValueThrowsExceptionNoSourceRegistered (line 511) | [Fact]
    method SameReloadTokenIsReturnedRepeatedly (line 527) | [Fact]
    method DifferentReloadTokenReturnedAfterReloading (line 542) | [Fact]
    method TokenTriggeredWhenReloadOccurs (line 562) | [Fact]
    method MultipleCallbacksCanBeRegisteredToReload (line 580) | [Fact]
    method NewTokenAfterReloadIsNotChanged (line 613) | [Fact]
    method KeyStartingWithColonMeansFirstSectionHasEmptyName (line 635) | [Fact]
    method KeyWithDoubleColonHasSectionWithEmptyName (line 657) | [Fact]
    method KeyEndingWithColonMeansLastSectionHasEmptyName (line 681) | [Fact]
    method SectionWithValueExists (line 703) | [Fact]
    method SectionWithChildrenExists (line 728) | [Fact]
    method NullSectionDoesNotExist (line 753) | [Fact]

FILE: test/Config.UserSecrets.Test/ConfigurationExtensionTest.cs
  class ConfigurationExtensionTest (line 19) | public class ConfigurationExtensionTest : IDisposable
    method SetSecret (line 25) | private void SetSecret(string id, string key, string value)
    method AddUserSecrets_FindsAssemblyAttribute (line 54) | [Fact]
    method AddUserSecrets_FindsAssemblyAttributeFromType (line 68) | [Fact]
    method AddUserSecrets_ThrowsIfAssemblyAttributeFromType (line 82) | [Fact]
    method AddUserSecrets_DoesNotThrowsIfOptional (line 97) | [Fact]
    method AddUserSecrets_With_SecretsId_Passed_Explicitly (line 108) | [Fact]
    method AddUserSecrets_Does_Not_Fail_On_Non_Existing_File (line 120) | [Fact]
    method Dispose (line 132) | public void Dispose()

FILE: test/Config.UserSecrets.Test/MsBuildTargetTest.cs
  class MsBuildTargetTest (line 14) | public class MsBuildTargetTest : IDisposable
    method MsBuildTargetTest (line 20) | public MsBuildTargetTest(ITestOutputHelper output)
    method GeneratesAssemblyAttributeFile (line 43) | [Theory]
    method AssertDotNet (line 114) | private void AssertDotNet(string args)
    method Dispose (line 142) | public void Dispose()

FILE: test/Config.UserSecrets.Test/PathHelperTest.cs
  class PathHelperTest (line 11) | public class PathHelperTest
    method Gives_Correct_Secret_Path (line 13) | [Fact]
    method Throws_If_UserSecretId_Contains_Invalid_Characters (line 29) | [Fact]

FILE: test/Config.Xml.Test/XmlConfigurationExtensionsTest.cs
  class XmlConfigurationExtensionsTest (line 10) | public class XmlConfigurationExtensionsTest
    method AddXmlFile_ThrowsIfFileDoesNotExistAtPath (line 12) | [Fact]

FILE: test/Config.Xml.Test/XmlConfigurationTest.cs
  class XmlConfigurationTest (line 16) | public class XmlConfigurationTest
    method LoadKeyValuePairsFromValidXml (line 18) | [Fact]
    method LoadMethodCanHandleEmptyValue (line 44) | [Fact]
    method CommonAttributesContributeToKeyValuePairs (line 62) | [Fact]
    method SupportMixingChildElementsAndAttributes (line 87) | [Fact]
    method NameAttributeContributesToPrefix (line 112) | [Fact]
    method NameAttributeInRootElementContributesToPrefix (line 138) | [Fact]
    method SupportMixingNameAttributesAndCommonAttributes (line 163) | [Fact]
    method SupportCDATAAsTextNode (line 187) | [Fact]
    method SupportAndIgnoreComments (line 205) | [Fact]
    method SupportAndIgnoreXMLDeclaration (line 231) | [Fact]
    method SupportAndIgnoreProcessingInstructions (line 258) | [Fact]
    method ThrowExceptionWhenFindDTD (line 287) | [Fact]
    method ThrowExceptionWhenFindNamespace (line 320) | [Fact]
    method ThrowExceptionWhenPassingNullAsFilePath (line 344) | [Fact]
    method ThrowExceptionWhenPassingEmptyStringAsFilePath (line 354) | [Fact]
    method ThrowExceptionWhenKeyIsDuplicated (line 364) | [Fact]
    method XmlConfiguration_Throws_On_Missing_Configuration_File (line 388) | [Fact]
    method XmlConfiguration_Does_Not_Throw_On_Optional_Configuration (line 395) | [Fact]
    method LoadKeyValuePairsFromValidEncryptedXml (line 401) | [ConditionalFact]
Condensed preview — 179 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (735K chars).
[
  {
    "path": ".appveyor.yml",
    "chars": 327,
    "preview": "init:\n- git config --global core.autocrlf true\nbranches:\n  only:\n  - master\n  - /^release\\/.*$/\n  - /^(.*\\/)?ci-.*$/\nbui"
  },
  {
    "path": ".gitattributes",
    "chars": 863,
    "preview": "*.doc  diff=astextplain\n*.DOC\tdiff=astextplain\n*.docx\tdiff=astextplain\n*.DOCX\tdiff=astextplain\n*.dot\tdiff=astextplain\n*."
  },
  {
    "path": ".gitignore",
    "chars": 366,
    "preview": "[Oo]bj/\n[Bb]in/\nTestResults/\n.nuget/\n_ReSharper.*/\npackages/\nartifacts/\nPublishProfiles/\n*.user\n*.suo\n*.cache\n*.docstate"
  },
  {
    "path": ".travis.yml",
    "chars": 564,
    "preview": "language: csharp\nsudo: false\ndist: trusty\nenv:\n  global:\n  - DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true\n  - DOTNET_CLI_TELE"
  },
  {
    "path": ".vsts-pipelines/builds/ci-internal.yml",
    "chars": 227,
    "preview": "trigger:\n- master\n- release/*\n\nresources:\n  repositories:\n  - repository: buildtools\n    type: git\n    name: aspnet-Buil"
  },
  {
    "path": ".vsts-pipelines/builds/ci-public.yml",
    "chars": 316,
    "preview": "trigger:\n- master\n- release/*\n\n# See https://github.com/aspnet/BuildTools\nresources:\n  repositories:\n  - repository: bui"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 171,
    "preview": "Contributing\n======\n\nInformation on contributing to this repo is in the [Contributing Guide](https://github.com/aspnet/H"
  },
  {
    "path": "Configuration.sln",
    "chars": 18399,
    "preview": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 15\r\nVisualStudioVersion = 15.0.26424.2\r\nMin"
  },
  {
    "path": "Directory.Build.props",
    "chars": 907,
    "preview": "<Project>\n  <Import\n    Project=\"$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), AspNetCoreSettin"
  },
  {
    "path": "Directory.Build.targets",
    "chars": 814,
    "preview": "<Project>\n  <PropertyGroup>\n    <RuntimeFrameworkVersion Condition=\" '$(TargetFramework)' == 'netcoreapp2.0' \">$(Microso"
  },
  {
    "path": "LICENSE.txt",
    "chars": 11361,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "NuGet.config",
    "chars": 197,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <packageSources>\n    <clear />\n    <!-- Restore sources should"
  },
  {
    "path": "NuGetPackageVerifier.json",
    "chars": 90,
    "preview": "{\n    \"Default\": {\n        \"rules\": [\n            \"DefaultCompositeRule\"\n        ]\n    }\n}"
  },
  {
    "path": "README.md",
    "chars": 599,
    "preview": "Configuration [Archived]\n========================\n\n**This GitHub project has been archived.** Ongoing development on thi"
  },
  {
    "path": "build/dependencies.props",
    "chars": 1868,
    "preview": "<Project>\n  <PropertyGroup>\n    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProject"
  },
  {
    "path": "build/repo.props",
    "chars": 921,
    "preview": "<Project>\n  <Import Project=\"dependencies.props\" />\n\n  <ItemGroup>\n    <ExcludeFromTest Include=\"$(RepositoryRoot)test\\C"
  },
  {
    "path": "build/sources.props",
    "chars": 767,
    "preview": "<Project>\n  <Import Project=\"$(DotNetRestoreSourcePropsPath)\" Condition=\"'$(DotNetRestoreSourcePropsPath)' != ''\"/>\n\n  <"
  },
  {
    "path": "build.cmd",
    "chars": 260,
    "preview": "@ECHO OFF\nPowerShell -NoProfile -NoLogo -ExecutionPolicy unrestricted -Command \"[System.Threading.Thread]::CurrentThread"
  },
  {
    "path": "build.sh",
    "chars": 253,
    "preview": "#!/usr/bin/env bash\n\nset -euo pipefail\nDIR=\"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" && pwd )\"\n\n# Call \"sync\" between \"c"
  },
  {
    "path": "korebuild-lock.txt",
    "chars": 84,
    "preview": "version:3.0.0-alpha1-20181004.7\ncommithash:27fabdaf2b1d4753c3d2749581694ca65d78f7f2\n"
  },
  {
    "path": "korebuild.json",
    "chars": 129,
    "preview": "{\n  \"$schema\": \"https://raw.githubusercontent.com/aspnet/BuildTools/master/tools/korebuild.schema.json\",\n  \"channel\": \"m"
  },
  {
    "path": "run.cmd",
    "chars": 246,
    "preview": "@ECHO OFF\nPowerShell -NoProfile -NoLogo -ExecutionPolicy unrestricted -Command \"[System.Threading.Thread]::CurrentThread"
  },
  {
    "path": "run.ps1",
    "chars": 6617,
    "preview": "#!/usr/bin/env powershell\n#requires -version 4\n\n<#\n.SYNOPSIS\nExecutes KoreBuild commands.\n\n.DESCRIPTION\nDownloads korebu"
  },
  {
    "path": "run.sh",
    "chars": 8950,
    "preview": "#!/usr/bin/env bash\n\nset -euo pipefail\n\n#\n# variables\n#\n\nRESET=\"\\033[0m\"\nRED=\"\\033[0;31m\"\nYELLOW=\"\\033[0;33m\"\nMAGENTA=\"\\"
  },
  {
    "path": "samples/KeyVaultSample/EnvironmentSecretManager.cs",
    "chars": 937,
    "preview": "using Microsoft.Azure.KeyVault.Models;\nusing Microsoft.Extensions.Configuration.AzureKeyVault;\n\nnamespace ConsoleApplica"
  },
  {
    "path": "samples/KeyVaultSample/KeyVaultSample.csproj",
    "chars": 524,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFrameworks>netcoreapp2.2;net461</TargetFrameworks>\n    <"
  },
  {
    "path": "samples/KeyVaultSample/Program.cs",
    "chars": 1032,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Security.Cryptography.X509Certificates;"
  },
  {
    "path": "samples/KeyVaultSample/settings.json",
    "chars": 68,
    "preview": "{\n  \"CertificateThumbprint\": \"\",\n  \"Vault\": \"\",\n  \"ClientId\": \"\"\n}\n"
  },
  {
    "path": "src/Config/ChainedBuilderExtensions.cs",
    "chars": 1413,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config/ChainedConfigurationProvider.cs",
    "chars": 3403,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config/ChainedConfigurationSource.cs",
    "chars": 979,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config/Config.csproj",
    "chars": 560,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <AssemblyName>Microsoft.Extensions.Configuration</AssemblyName"
  },
  {
    "path": "src/Config/ConfigurationBuilder.cs",
    "chars": 2180,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config/ConfigurationKeyComparer.cs",
    "chars": 2579,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config/ConfigurationProvider.cs",
    "chars": 3832,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config/ConfigurationReloadToken.cs",
    "chars": 1653,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config/ConfigurationRoot.cs",
    "chars": 4517,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config/ConfigurationSection.cs",
    "chars": 3806,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config/MemoryConfigurationBuilderExtensions.cs",
    "chars": 2152,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config/MemoryConfigurationProvider.cs",
    "chars": 2215,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config/MemoryConfigurationSource.cs",
    "chars": 1072,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config/Properties/AssemblyInfo.cs",
    "chars": 615,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config/Properties/Resources.Designer.cs",
    "chars": 1413,
    "preview": "// <auto-generated />\nnamespace Microsoft.Extensions.Configuration\n{\n    using System.Globalization;\n    using System.Re"
  },
  {
    "path": "src/Config/Resources.resx",
    "chars": 5864,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "src/Config/baseline.netcore.json",
    "chars": 28910,
    "preview": "{\n  \"AssemblyIdentity\": \"Microsoft.Extensions.Configuration, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb9793829"
  },
  {
    "path": "src/Config.Abstractions/Config.Abstractions.csproj",
    "chars": 837,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <AssemblyName>Microsoft.Extensions.Configuration.Abstractions<"
  },
  {
    "path": "src/Config.Abstractions/ConfigurationExtensions.cs",
    "chars": 3926,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.Abstractions/ConfigurationPath.cs",
    "chars": 2928,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.Abstractions/IConfiguration.cs",
    "chars": 1765,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.Abstractions/IConfigurationBuilder.cs",
    "chars": 1513,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.Abstractions/IConfigurationProvider.cs",
    "chars": 2092,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.Abstractions/IConfigurationRoot.cs",
    "chars": 818,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.Abstractions/IConfigurationSection.cs",
    "chars": 815,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.Abstractions/IConfigurationSource.cs",
    "chars": 763,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.Abstractions/baseline.netcore.json",
    "chars": 13064,
    "preview": "{\n  \"AssemblyIdentity\": \"Microsoft.Extensions.Configuration.Abstractions, Version=2.1.1.0, Culture=neutral, PublicKeyTok"
  },
  {
    "path": "src/Config.AzureKeyVault/AzureKeyVaultConfigurationExtensions.cs",
    "chars": 9944,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Config.AzureKeyVault/AzureKeyVaultConfigurationProvider.cs",
    "chars": 2711,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Config.AzureKeyVault/AzureKeyVaultConfigurationSource.cs",
    "chars": 1230,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Config.AzureKeyVault/Config.AzureKeyVault.csproj",
    "chars": 953,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <AssemblyName>Microsoft.Extensions.Configuration.AzureKeyVault"
  },
  {
    "path": "src/Config.AzureKeyVault/DefaultKeyVaultSecretManager.cs",
    "chars": 892,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Config.AzureKeyVault/IKeyVaultClient.cs",
    "chars": 1617,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Config.AzureKeyVault/IKeyVaultSecretManager.cs",
    "chars": 1102,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Config.AzureKeyVault/KeyVaultClientWrapper.cs",
    "chars": 1536,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Config.AzureKeyVault/Properties/AssemblyInfo.cs",
    "chars": 1020,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.AzureKeyVault/baseline.netcore.json",
    "chars": 8650,
    "preview": "{\n  \"AssemblyIdentity\": \"Microsoft.Extensions.Configuration.AzureKeyVault, Version=2.1.1.0, Culture=neutral, PublicKeyTo"
  },
  {
    "path": "src/Config.Binder/BinderOptions.cs",
    "chars": 643,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.Binder/Config.Binder.csproj",
    "chars": 518,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <AssemblyName>Microsoft.Extensions.Configuration.Binder</Assem"
  },
  {
    "path": "src/Config.Binder/ConfigurationBinder.cs",
    "chars": 23515,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.Binder/Properties/AssemblyInfo.cs",
    "chars": 622,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.Binder/Properties/Resources.Designer.cs",
    "chars": 3892,
    "preview": "// <auto-generated />\nnamespace Microsoft.Extensions.Configuration.Binder\n{\n    using System.Globalization;\n    using Sy"
  },
  {
    "path": "src/Config.Binder/Resources.resx",
    "chars": 6533,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "src/Config.Binder/baseline.netcore.json",
    "chars": 8458,
    "preview": "{\n  \"AssemblyIdentity\": \"Microsoft.Extensions.Configuration.Binder, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb"
  },
  {
    "path": "src/Config.CommandLine/CommandLineConfigurationExtensions.cs",
    "chars": 2667,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.CommandLine/CommandLineConfigurationProvider.cs",
    "chars": 6764,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.CommandLine/CommandLineConfigurationSource.cs",
    "chars": 1249,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.CommandLine/Config.CommandLine.csproj",
    "chars": 570,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <AssemblyName>Microsoft.Extensions.Configuration.CommandLine</"
  },
  {
    "path": "src/Config.CommandLine/Properties/AssemblyInfo.cs",
    "chars": 627,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.CommandLine/Properties/Resources.Designer.cs",
    "chars": 2659,
    "preview": "// <auto-generated />\nnamespace Microsoft.Extensions.Configuration.CommandLine\n{\n    using System.Globalization;\n    usi"
  },
  {
    "path": "src/Config.CommandLine/Resources.resx",
    "chars": 6180,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "src/Config.CommandLine/baseline.netcore.json",
    "chars": 6272,
    "preview": "{\n  \"AssemblyIdentity\": \"Microsoft.Extensions.Configuration.CommandLine, Version=2.1.1.0, Culture=neutral, PublicKeyToke"
  },
  {
    "path": "src/Config.EnvironmentVariables/Config.EnvironmentVariables.csproj",
    "chars": 612,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <AssemblyName>Microsoft.Extensions.Configuration.EnvironmentVa"
  },
  {
    "path": "src/Config.EnvironmentVariables/EnvironmentVariablesConfigurationProvider.cs",
    "chars": 4253,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.EnvironmentVariables/EnvironmentVariablesConfigurationSource.cs",
    "chars": 1080,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.EnvironmentVariables/EnvironmentVariablesExtensions.cs",
    "chars": 2620,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.EnvironmentVariables/Properties/AssemblyInfo.cs",
    "chars": 636,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.EnvironmentVariables/baseline.netcore.json",
    "chars": 5035,
    "preview": "{\n  \"AssemblyIdentity\": \"Microsoft.Extensions.Configuration.EnvironmentVariables, Version=2.1.1.0, Culture=neutral, Publ"
  },
  {
    "path": "src/Config.FileExtensions/Config.FileExtensions.csproj",
    "chars": 713,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <AssemblyName>Microsoft.Extensions.Configuration.FileExtension"
  },
  {
    "path": "src/Config.FileExtensions/FileConfigurationExtensions.cs",
    "chars": 4701,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.FileExtensions/FileConfigurationProvider.cs",
    "chars": 4271,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.FileExtensions/FileConfigurationSource.cs",
    "chars": 3517,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.FileExtensions/FileLoadExceptionContext.cs",
    "chars": 859,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.FileExtensions/Properties/AssemblyInfo.cs",
    "chars": 630,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.FileExtensions/Properties/Resources.Designer.cs",
    "chars": 1975,
    "preview": "// <auto-generated />\nnamespace Microsoft.Extensions.Configuration.FileExtensions\n{\n    using System.Globalization;\n    "
  },
  {
    "path": "src/Config.FileExtensions/Resources.resx",
    "chars": 5976,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "src/Config.FileExtensions/baseline.netcore.json",
    "chars": 12225,
    "preview": "{\n  \"AssemblyIdentity\": \"Microsoft.Extensions.Configuration.FileExtensions, Version=2.1.1.0, Culture=neutral, PublicKeyT"
  },
  {
    "path": "src/Config.Ini/Config.Ini.csproj",
    "chars": 626,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <AssemblyName>Microsoft.Extensions.Configuration.Ini</Assembly"
  },
  {
    "path": "src/Config.Ini/IniConfigurationExtensions.cs",
    "chars": 5043,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.Ini/IniConfigurationProvider.cs",
    "chars": 3313,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.Ini/IniConfigurationSource.cs",
    "chars": 1168,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.Ini/Properties/AssemblyInfo.cs",
    "chars": 619,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.Ini/Properties/Resources.Designer.cs",
    "chars": 2333,
    "preview": "// <auto-generated />\nnamespace Microsoft.Extensions.Configuration.Ini\n{\n    using System.Globalization;\n    using Syste"
  },
  {
    "path": "src/Config.Ini/Resources.resx",
    "chars": 6071,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "src/Config.Ini/baseline.netcore.json",
    "chars": 6092,
    "preview": "{\n  \"AssemblyIdentity\": \"Microsoft.Extensions.Configuration.Ini, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb979"
  },
  {
    "path": "src/Config.Json/Config.Json.csproj",
    "chars": 753,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <AssemblyName>Microsoft.Extensions.Configuration.Json</Assembl"
  },
  {
    "path": "src/Config.Json/JsonConfigurationExtensions.cs",
    "chars": 5061,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.Json/JsonConfigurationFileParser.cs",
    "chars": 3652,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.Json/JsonConfigurationProvider.cs",
    "chars": 2904,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.Json/JsonConfigurationSource.cs",
    "chars": 903,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.Json/Properties/AssemblyInfo.cs",
    "chars": 620,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.Json/Properties/Resources.Designer.cs",
    "chars": 3011,
    "preview": "// <auto-generated />\nnamespace Microsoft.Extensions.Configuration.Json\n{\n    using System.Globalization;\n    using Syst"
  },
  {
    "path": "src/Config.Json/Resources.resx",
    "chars": 6264,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "src/Config.Json/baseline.netcore.json",
    "chars": 6107,
    "preview": "{\n  \"AssemblyIdentity\": \"Microsoft.Extensions.Configuration.Json, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb97"
  },
  {
    "path": "src/Config.KeyPerFile/Config.KeyPerFile.csproj",
    "chars": 733,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <AssemblyName>Microsoft.Extensions.Configuration.KeyPerFile</A"
  },
  {
    "path": "src/Config.KeyPerFile/KeyPerFileConfigurationBuilderExtensions.cs",
    "chars": 2080,
    "preview": "using System;\nusing System.IO;\nusing Microsoft.Extensions.Configuration.KeyPerFile;\nusing Microsoft.Extensions.FileProvi"
  },
  {
    "path": "src/Config.KeyPerFile/KeyPerFileConfigurationProvider.cs",
    "chars": 2533,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\n\nnamespace Microsoft.Extensions.Configuration.KeyPerFil"
  },
  {
    "path": "src/Config.KeyPerFile/KeyPerFileConfigurationSource.cs",
    "chars": 1788,
    "preview": "using System;\nusing System.IO;\nusing Microsoft.Extensions.FileProviders;\n\nnamespace Microsoft.Extensions.Configuration.K"
  },
  {
    "path": "src/Config.KeyPerFile/README.md",
    "chars": 131,
    "preview": "\nThis is a configuration provider that uses a directory's files as data. A file's name is the key and the contents are "
  },
  {
    "path": "src/Config.UserSecrets/Config.UserSecrets.csproj",
    "chars": 878,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <PackageId>Microsoft.Extensions.Configuration.UserSecrets</Pac"
  },
  {
    "path": "src/Config.UserSecrets/PathHelper.cs",
    "chars": 3119,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.UserSecrets/Properties/AssemblyInfo.cs",
    "chars": 627,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Config.UserSecrets/Properties/Resources.Designer.cs",
    "chars": 3082,
    "preview": "// <auto-generated />\nnamespace Microsoft.Extensions.Configuration.UserSecrets\n{\n    using System.Globalization;\n    usi"
  },
  {
    "path": "src/Config.UserSecrets/Resources.resx",
    "chars": 6307,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!--\n    Microsoft ResX Schema\n\n    Version 2.0\n\n    The primary goals "
  },
  {
    "path": "src/Config.UserSecrets/UserSecretsConfigurationExtensions.cs",
    "chars": 7446,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.UserSecrets/UserSecretsIdAttribute.cs",
    "chars": 1426,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.t"
  },
  {
    "path": "src/Config.UserSecrets/baseline.netcore.json",
    "chars": 5356,
    "preview": "{\n  \"AssemblyIdentity\": \"Microsoft.Extensions.Configuration.UserSecrets, Version=2.1.1.0, Culture=neutral, PublicKeyToke"
  },
  {
    "path": "src/Config.UserSecrets/build/netstandard2.0/Microsoft.Extensions.Configuration.UserSecrets.props",
    "chars": 279,
    "preview": "<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n\n  <ItemGroup>\n    <!-- This capability represent"
  },
  {
    "path": "src/Config.UserSecrets/build/netstandard2.0/Microsoft.Extensions.Configuration.UserSecrets.targets",
    "chars": 638,
    "preview": "<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n\n  <PropertyGroup>\n    <MSBuildAllProjects>$(MSBu"
  },
  {
    "path": "src/Config.Xml/Config.Xml.csproj",
    "chars": 782,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <AssemblyName>Microsoft.Extensions.Configuration.Xml</Assembly"
  },
  {
    "path": "src/Config.Xml/Properties/AssemblyInfo.cs",
    "chars": 619,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.Xml/Properties/Resources.Designer.cs",
    "chars": 3334,
    "preview": "// <auto-generated />\nnamespace Microsoft.Extensions.Configuration.Xml\n{\n    using System.Globalization;\n    using Syste"
  },
  {
    "path": "src/Config.Xml/Resources.resx",
    "chars": 6317,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "src/Config.Xml/XmlConfigurationExtensions.cs",
    "chars": 5044,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.Xml/XmlConfigurationProvider.cs",
    "chars": 8221,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.Xml/XmlConfigurationSource.cs",
    "chars": 875,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.Xml/XmlDocumentDecryptor.cs",
    "chars": 4071,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "src/Config.Xml/baseline.netcore.json",
    "chars": 7683,
    "preview": "{\n  \"AssemblyIdentity\": \"Microsoft.Extensions.Configuration.Xml, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb979"
  },
  {
    "path": "src/Directory.Build.props",
    "chars": 374,
    "preview": "<Project>\n  <Import Project=\"..\\Directory.Build.props\" />\n\n  <PropertyGroup>\n    <GenerateDocumentationFile>true</Genera"
  },
  {
    "path": "test/Config.AzureKeyVault.Test/AzureKeyVaultConfigurationTest.cs",
    "chars": 8275,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "test/Config.AzureKeyVault.Test/Config.AzureKeyVault.Test.csproj",
    "chars": 905,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <AssemblyName>Microsoft.Extensions.Configuration.AzureKeyVault"
  },
  {
    "path": "test/Config.Binder.Test/Config.Binder.Test.csproj",
    "chars": 915,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <AssemblyName>Microsoft.Extensions.Configuration.Binder.Test</A"
  },
  {
    "path": "test/Config.Binder.Test/ConfigurationBinderTests.cs",
    "chars": 29176,
    "preview": "// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.\n// Licensed under the Apache License, Version 2."
  },
  {
    "path": "test/Config.Binder.Test/ConfigurationCollectionBindingTests.cs",
    "chars": 38125,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "test/Config.CommandLine.Test/CommandLineTest.cs",
    "chars": 8671,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "test/Config.CommandLine.Test/Config.CommandLine.Test.csproj",
    "chars": 842,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <AssemblyName>Microsoft.Extensions.Configuration.CommandLine.T"
  },
  {
    "path": "test/Config.EnvironmentVariables.Test/Config.EnvironmentVariables.Test.csproj",
    "chars": 878,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <AssemblyName>Microsoft.Extensions.Configuration.EnvironmentVa"
  },
  {
    "path": "test/Config.EnvironmentVariables.Test/EnvironmentVariablesTest.cs",
    "chars": 6679,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "test/Config.FileExtensions.Test/Config.FileExtensions.Test.csproj",
    "chars": 771,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <AssemblyName>Microsoft.Extensions.Configuration.FileExtension"
  },
  {
    "path": "test/Config.FileExtensions.Test/FileConfigurationBuilderExtensionsTest.cs",
    "chars": 2162,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "test/Config.FunctionalTests/ArrayTests.cs",
    "chars": 4771,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "test/Config.FunctionalTests/Config.FunctionalTests.csproj",
    "chars": 1092,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <AssemblyName>Microsoft.Extensions.Configuration.FunctionalTes"
  },
  {
    "path": "test/Config.FunctionalTests/ConfigurationTests.cs",
    "chars": 34290,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "test/Config.FunctionalTests/DisposableFileSystem.cs",
    "chars": 1979,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "test/Config.FunctionalTests/test.xml",
    "chars": 343,
    "preview": "<settings XmlKey1=\"XmlValue1\">\n  <!-- Comments -->\n  <XmlKey2 XmlKey3=\"XmlValue2\">\n    <!-- Comments -->\n    <XmlKey4>Xm"
  },
  {
    "path": "test/Config.Ini.Test/Config.Ini.Test.csproj",
    "chars": 810,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <AssemblyName>Microsoft.Extensions.Configuration.Ini.Test</Ass"
  },
  {
    "path": "test/Config.Ini.Test/IniConfigurationExtensionsTest.cs",
    "chars": 1656,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "test/Config.Ini.Test/IniConfigurationTest.cs",
    "chars": 8979,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "test/Config.Json.Test/ArrayTest.cs",
    "chars": 8493,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "test/Config.Json.Test/Config.Json.Test.csproj",
    "chars": 814,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <AssemblyName>Microsoft.Extensions.Configuration.Json.Test</As"
  },
  {
    "path": "test/Config.Json.Test/JsonConfigurationExtensionsTest.cs",
    "chars": 1337,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "test/Config.Json.Test/JsonConfigurationTest.cs",
    "chars": 5616,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "test/Config.KeyPerFile.Test/Config.KeyPerFile.Test.csproj",
    "chars": 755,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <AssemblyName>Microsoft.Extensions.Configuration.KeyPerFile.Te"
  },
  {
    "path": "test/Config.KeyPerFile.Test/KeyPerFileTests.cs",
    "chars": 9031,
    "preview": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing Syst"
  },
  {
    "path": "test/Config.Test/Config.Test.csproj",
    "chars": 824,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <AssemblyName>Microsoft.Extensions.Configuration.Test</Assembl"
  },
  {
    "path": "test/Config.Test/ConfigurationPathComparerTest.cs",
    "chars": 3710,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "test/Config.Test/ConfigurationPathTest.cs",
    "chars": 2121,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "test/Config.Test/ConfigurationTest.cs",
    "chars": 28968,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "test/Config.Test.Common/Config.Test.Common.csproj",
    "chars": 574,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <AssemblyName>Microsoft.Extensions.Configuration.Test.Common</"
  },
  {
    "path": "test/Config.Test.Common/ConfigurationProviderExtensions.cs",
    "chars": 609,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "test/Config.Test.Common/TestStreamHelpers.cs",
    "chars": 3152,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "test/Config.UserSecrets.Test/Config.UserSecrets.Test.csproj",
    "chars": 955,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <AssemblyName>Microsoft.Extensions.Configuration.UserSecrets.Te"
  },
  {
    "path": "test/Config.UserSecrets.Test/ConfigurationExtensionTest.cs",
    "chars": 5229,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "test/Config.UserSecrets.Test/MsBuildTargetTest.cs",
    "chars": 5799,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "test/Config.UserSecrets.Test/PathHelperTest.cs",
    "chars": 1593,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "test/Config.Xml.Test/Config.Xml.Test.csproj",
    "chars": 1049,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <AssemblyName>Microsoft.Extensions.Configuration.Xml.Test</Ass"
  },
  {
    "path": "test/Config.Xml.Test/XmlConfigurationExtensionsTest.cs",
    "chars": 806,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "test/Config.Xml.Test/XmlConfigurationTest.cs",
    "chars": 21109,
    "preview": "// Copyright (c) .NET Foundation. All rights reserved.\n// Licensed under the Apache License, Version 2.0. See License.tx"
  },
  {
    "path": "test/Directory.Build.props",
    "chars": 540,
    "preview": "<Project>\n  <Import Project=\"..\\Directory.Build.props\" />\n\n  <PropertyGroup>\n    <DeveloperBuildTestTfms>netcoreapp2.2</"
  },
  {
    "path": "version.props",
    "chars": 994,
    "preview": "<Project>\n  <PropertyGroup>\n    <VersionPrefix>3.0.0</VersionPrefix>\n    <VersionSuffix>alpha1</VersionSuffix>\n    <Pac"
  }
]

// ... and 1 more files (download for full content)

About this extraction

This page contains the full source code of the aspnet/Configuration GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 179 files (671.0 KB), approximately 150.8k tokens, and a symbol index with 668 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!