15

我无法将 App.Config 文件加载到应用程序域中。

我正在使用

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

来自使用 App.config但 App.Config 文件仍未加载的 Powershell Calling .NET Assembly。

我也尝试过重置缓存,如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 文件?

4

2 回答 2

18

尝试在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
于 2015-10-22T20:30:46.187 回答
-1

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

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

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

于 2013-07-12T21:35:37.473 回答