2013-06-05 2 views
0

Я написал задачу пользовательской сборки, которая считывает значения из appsettings в файле App.config. Когда я компилирую свою задачу как исполняемый файл и запускаю его, задача работает отлично. Правильные значения считываются из конфигурационного файла. Однако, когда я компилирую его как сборку и запускаю ее из целевого объекта в моем скрипте сборки, я получаю исключение System.NullReferenceException. Исключение происходит в цикле foreach, потому что диспетчер конфигурации возвращает null.Пользовательская задача MSBuild не читается из App.config [C#]

IEnumerable<string> tables = ConfigurationManager.AppSettings.GetValues(key); 
foreach (string txt in tables) 
{ 
     Logic..... 
} 

Я правильно вызываю пользовательскую задачу, потому что я прокомментировал проблему и успешно ее построил.

Кто-нибудь знает, почему это может произойти? или если я даже могу использовать файл App.config с пользовательскими задачами сборки?

Заранее спасибо

ответ

1

Если вы собираете проект в библиотеке, то он считывает из app.config вызывающего исполняемого файла. Если вы скомпилируете проект как исполняемый файл, он читает его собственный app.config.

+0

Ника, спасибо за ваш ответ. Он указал мне в правильном направлении, поэтому я отмечаю это как правильный ответ. Чтобы исправить мою проблему, я создал отдельный файл конфигурации, который я сопоставил с менеджером конфигурации. – Dan

1

Если кому-то интересно, я использовал следующий код, чтобы получить доступ к пользовательской конфигурации

private static string[] GetConfigFile() 
    { 
     var map = new ExeConfigurationFileMap(); 
     map.ExeConfigFilename = @"C:\ConfigFile.config"; 
     config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None); 

     return config.AppSettings.Settings.AllKeys; 
    } 

Приведенный выше код получает список ключей из указанного конфигурационного файла. Возвращаемое значение хранится в виде массива строк, которые я бегу через используя цикл Еогеасп, как показано ниже

string[] keyNames = GetConfigFile(); 
foreach (string keys in keyNames) 
     { 
      KeyValueConfigurationElement keyval = config.AppSettings.Settings[keys]; 
      Console.WriteLine(keyval.Value); 
     } 
Смежные вопросы