Uaktualniłem do wersji PowerShell 5.0.10586.117, a teraz nie mogę uzyskać dostępu do aplikacji AppSettings z pliku app.config. Kod działa z PowerShell v4 (próbowałem go na innych komputerach z zainstalowaną wersją v4 i zwraca dane z AppSettings).PowerShell 5 AppSettings Bug?
ustawić App Config w PowerShell
[System.AppDomain]::CurrentDomain.SetData("APP_CONFIG_FILE", $AppConfigPath)
mogę sprawdzić, czy bieżący domeny ustawień aplikacji z
[System.AppDomain]::CurrentDomain.GetData("APP_CONFIG_FILE")
zwrotów PATH\App.config
ale gdy uruchamiam
[System.Configuration.ConfigurationManager]::AppSettings.count
PowerShell v5 powraca: 0
ale PowerShell v4 (Windows 7, Windows Server 2008 R2 Enterprise, etc) zwraca: 5
Dlaczego zachowanie się różnić na 5 vs PowerShell PowerShell 4? Czy to błąd? Masz pomysł, jak rozwiązać problem z ustawieniami aplikacji?
[Więcej informacji]
Próbowałem robić obejście z
$configFile = System.Configuration.ConfigurationManager]::OpenExeConfiguration([System.Configuration.ConfigurationUserLevel]::None)
$settings = $configFile.AppSettings.Settings
$retVal = $settings[$keyName].Value
$configFile.Save([System.Configuration.ConfigurationSaveMode]::Modified)
[System.Configuration.ConfigurationManager]::RefreshSection($configFile.AppSettings.SectionInformation.Name)
tej pracy -round pomocą $ retval mogę uzyskać dane z AppSettings że spodziewać się, ale później zawiedzie plik .dll, który importuję, który oczekuje, że dane konfiguracji aplikacji istnieją.
[Aktualizacja 1]: Zaktualizowałem do wersji PowerShell 5 w systemach Windows 8, Windows 8.1 i Server 2012 i otrzymałem ten sam problem. Zaktualizowano tytuł i opis problemu, aby odzwierciedlić to we wszystkich testowanych egzemplarzach PowerShell 5.
[Aktualizacja 2]:
Per @PetSerAl, odkryłem, że będę miał ten sam problem w PowerShell v4 jeśli próbuję uzyskać AppSetting przed ustawić plik konfiguracyjny
[System.Configuration.ConfigurationManager]::AppSettings
[System.AppDomain]::CurrentDomain.SetData("APP_CONFIG_FILE", $AppConfigPath)
[System.Configuration.ConfigurationManager]::AppSettings.Count
zwraca 0
w PowerShell v4.
Jeśli przenieść mój plik konfiguracyjny aplikacji do C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe.config
wtedy nie mam problemu przekazujących dane, nie mam problemu z zewnętrznych bibliotek DLL, że jestem loading że oczekują informacji w app config
Jeśli z PowerShell v4 najpierw pytasz '[System.Configuration.ConfigurationManager] :: AppSettings' przed' [System.AppDomain] :: CurrentDomain.SetData ("APP_CONFIG_FILE", $ AppConfigPath) ', to czy masz ten sam problem? ? – PetSerAl
'[System.Configuration.ConfigurationManager] :: AppSettings' (* ma *) zwrócić sekcję AppSettings zdefiniowaną w pliku konfiguracyjnym aplikacji bieżącej domeny. Jeśli wywołasz AppSettings bez definiowania pliku konfiguracyjnego aplikacji, domyślnie jest to plik 'C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe.config', który nie istnieje w testowanych systemach. Ponieważ nie istnieje, nie zwróci niczego dla sekcji AppSettings. Mogę spróbować utworzyć plik, ale nie jestem pewien, co próbujesz przetestować. – rogergarrison
'[System.Configuration.ConfigurationManager] :: AppSettings; [System.AppDomain] :: CurrentDomain.SetData ("APP_CONFIG_FILE", $ AppConfigPath); [System.Configuration.ConfigurationManager] :: AppSettings'. Czy zwraca dane z pliku konfiguracyjnego przy drugim dostępie do '[System.Configuration.ConfigurationManager] :: AppSettings'? – PetSerAl