将app.config加载到AppDomain中

Ale*_*eau 14 powershell appdomain

我无法将App.Config文件加载到App域中.

我正在使用

[System.AppDomain]::CurrentDomain.SetData("APP_CONFIG_FILE", $config_path)
Run Code Online (Sandbox Code Playgroud)

来自Powershell使用App.config调用.NET程序集,但仍未加载App.Config文件.

我也尝试重置缓存,如使用CurrentDomain.SetData("APP_CONFIG_FILE")中所述,在PowerShell ISE中不起作用.

这是我的测试脚本:

$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
Run Code Online (Sandbox Code Playgroud)

我总是得到存储在machine.config中的连接字符串,而不是App.config中的连接字符串.

如何在应用程序域中加载我的特定App.Config文件?

Rob*_*ney 16

尝试在GetField语句之前移动SetData语句.

使用Windows 10上的PowerShell 5.0,您引用的链接提供的指导似乎有效:我可以检索AppSettingsConnectionStrings.

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
Run Code Online (Sandbox Code Playgroud)