I can't get the App.Config file to load into the App Domain.
I'm using
[System.AppDomain]::CurrentDomain.SetData("APP_CONFIG_FILE", $config_path)
from Powershell Calling .NET Assembly that uses App.config but the App.Config file is still not loaded.
I've also tried resetting the cache as explained in Using CurrentDomain.SetData("APP_CONFIG_FILE") doesn't work in PowerShell ISE .
Here is my test script:
$configFile = "{ActualPhysicalPath}\App.Config"
gc $configFile
Add-Type -AssemblyName System.Configuration
[Configuration.ConfigurationManager].GetField("s_initState", "NonPublic, Static").SetValue($null, 0)
[Configuration.ConfigurationManager].GetField("s_configSystem", "NonPublic, Static").SetValue($null, $null)
([Configuration.ConfigurationManager].Assembly.GetTypes() | where {$_.FullName -eq "System.Configuration.ClientConfigPaths"})[0].GetField("s_current", "NonPublic, Static").SetValue($null, $null)
[Configuration.ConfigurationManager]::ConnectionStrings[0].Name
[System.AppDomain]::CurrentDomain.SetData("APP_CONFIG_FILE", $null)
[Configuration.ConfigurationManager]::ConnectionStrings[0].Name
[System.AppDomain]::CurrentDomain.SetData("APP_CONFIG_FILE", $configFile)
[Configuration.ConfigurationManager]::ConnectionStrings[0].Name
I'm always getting the connection strings stored in machine.config, rather than those in the App.config.
How can I get my specific App.Config file loaded in the app domain?
Try moving your SetData statement before the GetField statement.
With PowerShell 5.0 on Windows 10, the guidance provided by the link you reference seems to work: I'm able to retrieve both AppSettings and ConnectionStrings.
Add-Type -AssemblyName System.Configuration
# Set this to the full path of your App.config
$configPath = "C:\Full\Path\To\App.config"
[System.AppDomain]::CurrentDomain.SetData("APP_CONFIG_FILE", $configPath)
[Configuration.ConfigurationManager].GetField("s_initState", "NonPublic, Static").SetValue($null, 0)
[Configuration.ConfigurationManager].GetField("s_configSystem", "NonPublic, Static").SetValue($null, $null)
([Configuration.ConfigurationManager].Assembly.GetTypes() | where {$_.FullName -eq "System.Configuration.ClientConfigPaths"})[0].GetField("s_current", "NonPublic, Static").SetValue($null, $null)
[System.Configuration.ConfigurationManager]::AppSettings
[System.Configuration.ConfigurationManager]::ConnectionStrings