将app.config加载到AppDomain中

时间:2013-04-25 13:57:20

标签: powershell appdomain

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

我正在使用

[System.AppDomain]::CurrentDomain.SetData("APP_CONFIG_FILE", $config_path)

来自Powershell Calling .NET Assembly that uses App.config,但仍未加载App.Config文件。

我也尝试按Using CurrentDomain.SetData("APP_CONFIG_FILE") doesn't work in 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

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

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

2 个答案:

答案 0 :(得分:14)

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

在Windows 10上使用PowerShell 5.0时,the link you reference提供的指导似乎有效:我可以检索 AppSettings 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

答案 1 :(得分:-1)

您是否尝试过此处提供的解决方案:Change default app.config at runtime

它似乎描述了某种缓存,并且还需要做更多的工作来确保读取加载的数据。

第一个答案的重要部分是:“存在一个缓存路径的ClientConfigPaths类。因此,即使在使用SetData更改路径后,也不会重新读取,因为已经存在缓存值。解决方案是也删除这些“