2013-04-25 107 views
7

我無法將App.Config文件加載到App Domain中。將app.config加載到AppDomain中

我使用

[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

您是否嘗試過使用ConfigurationManager.OpenExeConfiguration方法? – 2013-04-26 11:31:07

+0

我只是試過了,它仍然不起作用 – 2013-04-26 12:00:31

+0

我誤解了這個問題。抱歉。您不能將配置文件重命名爲YOUR_APPLICATION_NAME.exe.config並將其複製到應用程序文件夾?這應該工作。該應用程序將加載該文件。 – 2013-04-26 14:52:40

回答

9

嘗試移動您的SetData聲明前GetField聲明。

使用PowerShell 5.0在Windows 10,由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 
+0

我沒有一個工作區來測試這個,但如果有人可以確認這個工作,我會給你答案。感謝您花時間在這個非常古老的問題上 – 2015-10-23 16:14:32

-1

您是否嘗試過在這裏提出的解決方案:Change default app.config at runtime

這似乎描述的某種緩存,而且更多的工作必須完成,以確保加載的數據被讀取。

第一個答案的重要部分是:「存在緩存路徑的類ClientConfigPaths,因此,即使使用SetData更改路徑後,也不會重新讀取它,因爲已存在緩存的值。是刪除這些「