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

Chi*_*tan 5 c# xml asp.net

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

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; }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

    <configSections>
    <section name="myConfigDemo" type="myConfiguration"/>
    </configSections>
Run Code Online (Sandbox Code Playgroud)

然后我用这个部分作为

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

  </myConfigDemo>
Run Code Online (Sandbox Code Playgroud)

现在的问题是如何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; }
    }
Run Code Online (Sandbox Code Playgroud)

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

小智 2

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

不过,我不确定他们是否提供了更改值的方法(看一下)。然而,有一个问题:配置文件旨在在启动时配置应用程序;换句话说,应用程序在启动时读取文件,如果手动或通过进程更改,则再次读取该文件。对于 ASP.NET 应用程序,这意味着应用程序将自动重新启动(默认情况下;IIS 设置)。

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

应用程序池中有一个设置可以禁用配置更改时自动重新启动;但是,如果您这样做,当您进行配置更改时,应用程序将不会重新启动,并且您必须编写代码来重新启动它,以使其接受这些更改。

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

我希望这有帮助。