سؤال

لدي فئة مثل هذا:

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 لمشروع تركيبات الاختبار الذي قمت به.لذا، لا أعرف لماذا لا أزال أتلقى هذا الخطأ.

من فضلك، مساعدة.

هل كانت مفيدة؟

المحلول

عند تختبره مع 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

نصائح أخرى

أيضًا: حاول استخدام ConfigurationManager فئة بدلاً من "إعدادات التكوين":

استخدم علامة اختيار 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. استخدام

وعلى سبيل المثال:

    <إضافة اسم = "NORTHWNDConnectionString" سلسلة_الاتصال = "مصدر البيانات = \ SQLEXPRESS؛ AttachDbFilename = | DataDirectory | \ NORTHWND.MDF؛ أمان متكامل = صحيح، العضو مثيل = صحيح" الموفر = "System.Data.SqlClient" />

وسلسلة cnstr = ConfigurationManager.ConnectionStrings [ "NORTHWNDConnectionString"] ToString ()؛.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top