2012-11-16 20 views
5

मैं PowerShell आईएसई में एक .NET 4.0 विधानसभा उपयोग करने का प्रयास कर रहा हूँ, और जो के माध्यम से प्रयोग किया जाता है कॉन्फ़िग फ़ाइल को बदलने की कोशिश कर रहा:CurrentDomain.SetData ("APP_CONFIG_FILE") का उपयोग करना PowerShell आईएसई में काम नहीं करता

[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

यह है, क्योंकि पथ PowerShell आईएसई के लिए App.config करने के लिए पहले से ही लोड किया गया है और कैश की गई तो बाद में app.config पथ को बदलने एक फर्क नहीं होंगे: stackoverflow.com/q/6150644/222748

यहाँ एक उदाहरण स्क्रिप्ट साफ हो जाएगा है कैश की गई पथ तो यह PowerShell आईएसई के तहत काम करेगा:

[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

यह मेरे लिए काम किया के लिए काम नहीं किया। मुझे नियमित खोल के साथ-साथ आईएसई का उपयोग करके भी यही समस्या थी। – rikkit

1

मेरे लिए काम करता है [0] बंद ले रहा है।

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