ConfigurationSettings.AppSettings пуст, выдает нулевое исключение

StackOverflow https://stackoverflow.com/questions/1602099

Вопрос

У меня есть такой класс, как этот:

public class RxNormFolderMgr
{
    // properties
    public string RxNormFolder { get { return ConfigurationSettings.AppSettings["rootFolder"].ToString(); } }
}

Когда я пытаюсь использовать это вот так:

public class TestRxNormFolderManager : ColumnFixture
{
    public string RxNormFolder()
    {
        RxNormFolderMgr folderMgr = new RxNormFolderMgr();
        return folderMgr.RxNormFolder;
    }
}

Я получаю сообщение об ошибке:"Система.Отражение.Исключение TargetInvocationException:Исключение было сгенерировано целью вызова.---> Исключение System.NullReferenceException:Ссылка на объект не установлена на экземпляр объекта ". Свойство AllKeys для AppSettings представляет собой массив нулевой длины, где я ожидаю длину 1.

Мой файл app.config в проекте выглядит следующим образом:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="rootFolder" value ="C:\RxNorm" />
        <!-- Root folder must not end with slash. -->
    </appSettings>
</configuration>

Я знаю ConfigurationSettings.AppSettings должен быть устаревшим, и я должен использовать ConfigurationManager.AppSettings, но я даже не могу заставить это скомпилировать.У меня есть ссылка в проекте на систему.конфигурация (c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.configuration.DLL на моей машине) и using в верхней части моего кода.

Я использую Fitnesse для тестирования кода, и именно тогда я получаю сообщение об ошибке.Насколько я понимаю, я также должен поместить копию файла app.config в папку Bin> Debug проекта test fixtures, который я уже сделал.Итак, я не знаю, почему я до сих пор получаю эту ошибку.

Пожалуйста, помогите.

Это было полезно?

Решение

Когда вы тестируете с помощью FitNesse, фактический исполняемый файл выполняется "FitServer.exe", поэтому AppSettings ищет "FitServer.exe.config" в каталоге с FitServer.exe lives.Итак, быстрое и грязное решение - скопировать туда файл app.config и переименовать его.

Лучшим решением является указание конфигурации приложения, как описано здесь: http://www.syterra.com/FitnesseDotNet/ApplicationConfigurationFile.html

или, если вы используете fitSharp (что является улучшением FitNesse.NET): http://www.syterra.com/Fit/AppConfigFiles.html

Другие советы

Также: попробуйте использовать ConfigurationManager класс вместо "ConfigurationSettings":

Сначала используйте проверку на наличие NOT NULL:

public class RxNormFolderMgr
{
    // properties
    public string RxNormFolder 
    { 
       get
       { 
           if(ConfigurationManager.AppSettings["rootFolder"] != null)
           {
               return ConfigurationManager.AppSettings["rootFolder"].ToString(); 
           }
           return string.Empty;
       }
    }
}

Это внутри сборки библиотеки классов?Они никогда не используют свой собственный app.config, а вместо этого используют app.config хост-приложения (приложение, которое использует библиотеку классов).

Марк

Не помещайте это в appsettings.Использование <connectionStrings>

пример:

<appSettings />

<connectionStrings> <add name="NORTHWNDConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory| ORTHWND.MDF;Integrated Security=True;User Instance=True" providerName="System.Data.SqlClient" />

</connectionStrings>

строка cnstr = ConfigurationManager.Строки подключения["NORTHWNDConnectionString"].toString();

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top