ConfigurationSettings.AppSettings пуст, выдает исключение NULL - PullRequest
1 голос
/ 21 октября 2009

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

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;
    }
}

Я получаю сообщение об ошибке: «System.Reflection.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, но я даже не могу заставить его скомпилировать. У меня есть ссылка в проекте на System.configuration (c: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ System.configuration.dll на моем компьютере) и инструкция наверху моего кода.

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

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

Ответы [ 3 ]

6 голосов
/ 21 октября 2009

Также: попробуйте использовать класс 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 хост-приложения (приложение, которое использует библиотеку классов).

Марк

2 голосов
/ 21 октября 2009

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

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

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

0 голосов
/ 18 марта 2010

Не помещайте это в appsettings. Используйте

пример:

string cnstr = ConfigurationManager.ConnectionStrings ["NORTHWNDConnectionString"]. ToString ();

...