9

PowerShellISEで.NET4.0アセンブリを使用しようとしていますが、次の方法で使用される構成ファイルを変更しようとしています。

[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内から実行しただけで、期待どおりに機能しません。

4

2 に答える 2

24

これは、PowerShell ISEのapp.configへのパスが既に読み込まれてキャッシュされているため、後でapp.configパスを変更しても違いはありません: stackoverflow.com/q/6150644/222748

キャッシュされたパスをクリアしてPowerShellISEで機能するようにするスクリプトの例を次に示します。

[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
于 2013-03-14T07:20:41.147 に答える
2

離陸[0]は私のために働きます。

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

于 2014-05-28T01:15:06.117 に答える