2009-08-14 2 views
5

У меня есть файл app.config, который содержит следующую.NET ConfigurationManager App.config путаница

<?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> 

Я собирался использовать класс ConfigurationSettings, чтобы прочитать его, но устарела. Это было довольно просто в использовании. Теперь я должен использовать класс ConfigurationManager, и теперь у меня есть этот код для его чтения.

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

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

Но он продолжает выходить из строя. Я изменил свойства app.config, чтобы скопировать его в сборку, но он продолжает считать, что он не может найти файл. Исключение говорит, что он ищет TestConsole.vshost.exe.config. Теперь vs2k8sp1 автоматически переименует app.config, и если да, то что я делаю неправильно? Конечно, мне не нужно переименовывать файл app.config для отладки vhost. В версии я знаю, что он, вероятно, переименован в TestConsole.exe.config. Так что происходит не так? Это неправильный код или что?

+2

.NET не является «ошибкой». Он выдает исключения. Когда исключение не отображается, и заставляет вашу программу «не работать», вы должны опубликовать полное исключение в своем вопросе. Поймайте исключение, затем опубликуйте результаты 'ex.ToString()'. –

+0

сделаю. Я попытался переименовать файл в TestConsole.vhost.exe.config, но он вернулся пустым. –

+0

Hi John, Это исключение. Произошла ошибка при создании обработчика раздела конфигурации для PowershellSnapI ns: Не удалось загрузить файл или сборку «Система» или одна из ее зависимостей. Не удается найти указанный файл sys . (C: \ Users \ Administrator \ Documents \ Visual Stu dio 2008 \ Projects \ TestConsole \ TestConsole \ bin \ Debug \ TestConsole.vshost.exe.confi g строка 4) –

ответ

12

Вот как я это сделал:

-Сделать уверен, что System и System.Configuration.dll доступны в каталоге бен. Вы делаете это, добавляя ссылку на обе библиотеки dll и устанавливая их атрибут copy local в true.

-Убедитесь в файле App.Config, установите атрибуты copy local на false.

-Использование следующим способом:

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

    } 
} 

-The XMLCheck должен вернуть "WebAdministration"

+0

Ключ не имеет значения, так как мне не нужно знать ключ, просто значение, которое является именем snapin powershell. –

+0

Ответ обновлен. – Graviton

+0

Hi Ngu Soon Hui, Это сработало. Благодарю. Теперь я вижу (ослепительно красиво), что класс ConfigurationManager статичен. Благодарю. –

1

VS переименовывает app.config в yourappname.exe и помещает его в каталог бен вместе с вашим. exe

Можете ли вы подтвердить, что файл существует в каталоге bin вместе с вашим exe.

+1

Файл TestConsole.vhost.exe.config находится в каталоге Visual Studio 2008 \ Projects \ TestConsole \ TestConsole \ bin \ Debug. –

Смежные вопросы