我无法将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文件?
答案 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更改路径后,也不会重新读取,因为已经存在缓存值。解决方案是也删除这些“