2012-11-16 78 views
5

我試圖在PowerShell ISE中使用.NET 4.0組件,並試圖改變其通過使用配置文件:使用CurrentDomain.SetData(「APP_CONFIG_FILE」)在PowerShell ISE中不起作用

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

[Configuration.ConfigurationManager] :: ConnectionStrings.Count總是返回「1」,
和「[Configuration.ConfigurationManager] :: ConnectionStrings [0] .Name」總是返回「LocalSqlServer」,並且ConnectionString名稱不在我的「.config」文件。

請注意,從PowerShell命令提示符執行PowerShell腳本將按預期運行。就在我從PowerShell ISE內部執行它時,它不能按預期工作。

回答

19

這是因爲App.config中的PowerShell ISE中的路徑已經被加載並緩存,以便改變在app.config路徑之後不會有所作爲: stackoverflow.com/q/6150644/222748

這裏有一個例子腳本,將清除所以它將在PowerShell ISE下工作:

[System.AppDomain]::CurrentDomain.SetData("APP_CONFIG_FILE", $PathToConfig) 
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 
+0

這並沒有爲我 – Trent

+0

這個工作對我的工作。我使用常規shell以及ISE也遇到同樣的問題。 – rikkit

1

起飛[0]爲我工作。

([Configuration.ConfigurationManager].Assembly.GetTypes() | where {$_.FullName -eq "System.Configuration.ClientConfigPaths"}).GetField("s_current", "NonPublic, Static").SetValue($null, $null)

相關問題