如何修改web.config部分运行时?

时间:2012-01-23 09:56:04

标签: c# asp.net xml

我创建了一个直接映射到Web ConfigSection的类。配置。我的课程定义如下:

public class myConfiguration: ConfigurationSection
{
    public myConfiguration()
    {
        //
        // TODO: Add constructor logic here
        //
    }

    [ConfigurationProperty("fileName", IsRequired = true)]
    public string FileName
    {
        get { return this["fileName"] as string; }
    }


    [ConfigurationProperty("rootNode", IsRequired = true)]
    public string RootNode
    {
        get { return this["rootNode"] as string; }
    }

    [ConfigurationProperty("childNode", IsRequired = true)]
    public string ChildNode
    {
        get { return this["childNode"] as string; }
    }

    [ConfigurationProperty("comparableAttributes", IsRequired = true)]
    public string ComparableAttributes
    {
        get
        { return this["comparableAttributes"] as string; }
    }
}

我在web.config文件中创建了如下部分:

    <configSections>
    <section name="myConfigDemo" type="myConfiguration"/>
    </configSections>

然后我将此部分用作

  <myConfigDemo fileName="myXml.xml" rootNode="world" childNode="country" comparableAttributes="id, population">

  </myConfigDemo>

现在的问题是如何在运行时分配fileName = "anotherFile.xml"?我试过了

   [ConfigurationProperty("fileName", IsRequired = true)]
    public string FileName
    {
        get { return this["fileName"] as string; }
        set {
            string str = this["fileName"] as string; 
              str  = value; }
    }

但我的Visual Studio让我的电脑挂起我使用上面的代码!我知道当你只使用getset使我的电脑挂起时,该属性是只读的!我该怎么做才能更改文件名运行时?

1 个答案:

答案 0 :(得分:2)

有.net类可以更准确地访问几乎所有可以在.config文件中找到的内容(而不仅仅是appSettings或ConnectionStrings元素);文档:http://msdn.microsoft.com/en-us/library/x1et32w6.aspx

我不确定他们是否提供改变价值观的方法(看看)。但是,一个gotcha:config文件旨在在启动时配置应用程序;换句话说,应用程序在启动时读取文件,然后再次手动或通过进程更改文件。使用asp.net应用程序,这意味着应用程序将自动重启(默认情况下; IIS设置)。

如果您确实想在运行时重新配置应用程序,则每次保存文件时都会强制重新启动它。因此,在这种情况下,编写代码以在内存中进行所有更改(例如,通过使用xml类),然后立即保存所有内容。

app-pool中有一个设置可以禁用配置更改时的自动重启;但是,如果你这样做,当你进行配置更改时应用程序将不会重新启动,并且你必须编写代码来重新启动它以获取这些更改。

如果您想自动将自定义配置类序列化为xml元素,则此类可能是您的朋友:http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx

我希望有所帮助。