2009-08-14 4 views
5

Mam plik app.config, który zawiera następująceConfigurationManager .NET app.config zamieszanie

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
     <section name ="PowershellSnapIns" type ="System.Configuration.DictionarySectionHandler,System"/> 
    </configSections> 

    <PowershellSnapIns> 
     <add key="SnapIn1" value="WebAdministration" /> 
     <add key="SnapIn2" value="Jimmy Hendrix" /> 
     <add key="SnapIn3" value="..." /> 
    </PowershellSnapIns> 
</configuration> 

ja jechałem użyć klasy ConfigurationSettings, aby ją przeczytać, ale została zaniechana. To było dość proste w użyciu. Teraz muszę użyć klasy ConfigurationManager, a teraz mam ten kod, aby ją przeczytać.

System.Configuration.Configuration config = 
    ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 

IDictionary SnapInList = (IDictionary) config.GetSection("PowershellSnapIns"); 

Ale nadal utrzymuje błąd. Zmieniłem właściwości app.config, aby skopiować je do kompilacji, ale nadal akceptuje to, że nie może znaleźć pliku. Wyjątek mówi, że szuka TestConsole.vshost.exe.config. Czy vs2k8sp1 teraz automatycznie zmienia nazwę pliku app.config, a jeśli tak, to co robię źle? Z pewnością nie muszę zmieniać nazwy pliku app.config, aby debugować vhost. Wiem, że w wersji jest to prawdopodobnie zmieniona na TestConsole.exe.config. Co się dzieje źle? Czy jest to przypadek nieprawidłowego kodu, czy co?

+2

.NET nie "błąd". Rzuca wyjątki. Gdy wyjątek nie jest przechwytywany i powoduje, że program "nie działa", w swoim pytaniu należy opublikować pełny wyjątek. Złap wyjątek, a następnie opublikuj wyniki 'ex.ToString()'. –

+0

zrobi. Próbowałem zmienić nazwę pliku na TestConsole.vhost.exe.config, ale wrócił pusty. –

+0

Witaj John, To jest wyjątek. Wystąpił błąd podczas tworzenia modułu obsługi sekcji konfiguracji dla PowershellSnapI ns: Nie można załadować pliku lub zespołu "System" lub jednej z jego zależności. Sys Tem nie może znaleźć określonego pliku. (C: \ Users \ Administrator \ Documents \ Visual Stu dio 2008 \ Projects \ TestConsole \ TestConsole \ bin \ Debug \ TestConsole.vshost.exe.confi g line 4) –

Odpowiedz

12

Oto jak to zrobiłem:

-Upewnij że System i System.Configuration.dll są dostępne w katalogu bin. Robi się to poprzez dodanie odwołania do obu bibliotek dll i ustawienie ich atrybutu copy local na true.

-Upewnij się, że w pliku App.Config ustaw atrybuty copy local na false.

-Za pomocą następującej metody:

public static string XMLCheck 
{ 
    get 
    { 
     var section =(Hashtable)ConfigurationManager.GetSection("PowershellSnapIns"); 
     return (string)section["SnapIn1"]; 

    } 
} 

-The XMLCheck powinien wrócić "WebAdministration"

+0

Klucz nie ma znaczenia, ponieważ nie potrzebuję znać klucza, tylko wartość, która jest nazwą snapin powershell. –

+0

Odpowiedź zaktualizowana. – Graviton

+0

Cześć Ngu Wkrótce Hui, Zadziałało. Dzięki. Teraz widzę (z perspektywy jest piękna), że klasa ConfigurationManager jest statyczna. Dzięki. –

1

VS zmienia nazwę app.config do yourappname.exe i umieszcza go w katalogu bin wraz z. exe

Czy możesz potwierdzić, że plik istnieje w katalogu bin razem z twoim exe.

+1

Plik TestConsole.vhost.exe.config znajduje się w katalogu Visual Studio 2008 \ Projects \ TestConsole \ TestConsole \ bin \ Debug. –