سؤال

لدي قسم تكوين مخصص في طلبي:

public class SettingsSection : ConfigurationSection
{
    [ConfigurationProperty("Setting")]
    public MyElement Setting
    {
        get
        {
            return (MyElement)this["Setting"];
        }
        set { this["Setting"] = value; }
    }
}

public class MyElement : ConfigurationElement
{
    public override bool IsReadOnly()
    {
        return false;
    }

    [ConfigurationProperty("Server")]
    public string Server
    {
        get { return (string)this["Server"]; }
        set { this["Server"] = value; }
    }
}

في ملف web.config الخاص بي

  <configSections>
    <sectionGroup name="mySettingsGroup">
      <section name="Setting" 
               type="MyWebApp.SettingsSection"  
               requirePermission="false" 
               restartOnExternalChanges="true"
               allowDefinition="Everywhere"  />
    </sectionGroup>
  </configSections>

  <mySettingsGroup>
    <Setting>
      <MyElement Server="serverName" />
    </Setting>
  </mySettingsGroup>

قراءة القسم يعمل بشكل جيد.المشكلة التي أواجهها هي أنني عندما أقرأ القسم عبر

var settings = (SettingsSection)WebConfigurationManager.GetSection("mySettingsGroup/Setting");

وبعد ذلك أشرع في تعديل Server ملكية:

   settings.Server = "something";

لا يؤدي هذا إلى تعديل خاصية "الخادم" في ملف web.config.

ملحوظة:يجب أن يعمل هذا في ظل ثقة متوسطة، لذا لا يمكنني استخدامه WebConfigurationManager.OpenWebConfiguration الذي يعمل بشكل جيد.هل هناك طريقة واضحة لإخبار ConfigSection لإنقاذ نفسها؟

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

المحلول

إجابة قصيرة - لا.كان فريق .NET (يُزعم) يهدف إلى إصلاح هذه المشكلة في الإصدار 4، لكن ذلك لم يحدث.

والسبب هو الاستخدام WebConfigurationManager.GetSection إرجاع متداخلة للقراءة فقط NameValueCollections، والتي لا تستمر عند تغيير قيمها.استخدام WebConfigurationManager.OpenWebConfiguration, ، كما تأكدت تمامًا، هي الطريقة الوحيدة للحصول على حق الوصول للقراءة والكتابة إلى التكوين - ولكن بعد ذلك ستحصل على FileIOPermission استثناء القيت، كما OpenWebConfiguration يحاول تحميل كافة التكوينات الموروثة وصولاً إلى web.config الخاص بك - والتي تتضمن ملفات web.config وmachine.config على مستوى الجهاز في C:\WINDOWS\Microsoft.NET\Framework, ، والتي تقع بوضوح خارج نطاق الثقة المتوسطة.

إجابة طويلة - استخدم XDocument / XmlDocument و XPath للحصول على/تعيين قيم التكوين.

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