سؤال

ولقد انتقلت مؤخرا إلى ويندوز فيستا x64، وفجأة، لم يتم تقرأ رسالتي كتلة appSettings machine.config قبل أي المجالس .NET.

ومباشرة بعد configSections، وقبل configProtectedData في C: \ ويندوز \ Microsoft.NET \ الإطار \ V2.0.50727 \ CONFIG \ machine.config، ولدي:

<appSettings>
    <add key="foo" value="blah"/>
</appSettings>
<system.runtime.remoting>
    <customErrors mode="Off"/>
</system.runtime.remoting>

وكان لحفظه عن طريق تشغيل المفكرة ++ كمسؤول، لأنه مؤمن خلاف ذلك، وربما لأسباب وجيهة. تشغيل التعليمات البرمجية التالية في SnippetCompiler أو VS .NET 2008:

    foreach(var s in ConfigurationManager.AppSettings.AllKeys)
    {
        Console.WriteLine(s);   
    }

    AppSettingsReader asr = new AppSettingsReader();

    Console.WriteLine(asr.GetValue("foo", typeof(string)));

ويكتب من أي مفاتيح وفشل مع الاستثناء التالي:

---
The following error occurred while executing the snippet:
System.InvalidOperationException: The key 'foo' does not exist in the appSettings configuration section.
    at System.Configuration.AppSettingsReader.GetValue(String key, Type type)
    at MyClass.RunSnippet()
    at MyClass.Main()
---

والتطبيق وأنا أكتب يستخدم machine.config بمثابة تراجع عن معرفة أي بيئة المستخدم يجب أن تكون قيد التشغيل في إذا كان لا يمكن العثور عليها في app.config، لذلك أود أن تجنب الاضطرار إلى إعادة كتابة التطبيق الخاص بي لمعرفة شيء ينبغي أن يكون العمل نفسه كما فعلت في عامي 2000 و XP.

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

المحلول

وحلها مع السطر التالي من التعليمات البرمجية:

ConfigurationManager.OpenMachineConfiguration().FilePath

والذي عاد:

C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Config\machine.config

وبدلا من:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config

ونسيت أنا باستخدام 64 بت الآن. إضافة قسم appSettings في ملف التكوين السليم حل المشكلة.

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