ConfigurationSettings.AppSettings فارغ، ويطرح استثناءً فارغًا
-
05-07-2019 - |
سؤال
لدي فئة مثل هذا:
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. استخدام
وعلى سبيل المثال:
وسلسلة cnstr = ConfigurationManager.ConnectionStrings [ "NORTHWNDConnectionString"] ToString ()؛.