如何修改web.config中的运行时(runtime)部分?

5

我创建了一个类,直接映射到web.config的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会使我的电脑卡顿!我知道当你只使用get时,该属性是只读的,但是当你使用set时,我的电脑就会卡顿!!!我该怎么做才能在运行时更改文件名?


https://dev59.com/q3RB5IYBdhLWcg3wF0HH - stian.net
一个小时内有两个相同标题的问题?您应该编辑原始问题,而不是创建新问题。http://stackoverflow.com/questions/8968924/how-to-modify-web-config-runtime(如果标题不同,则修改它们) - Tim Schmelter
我认为这与 appSettings 有关!系统配置,我对自己的配置很感兴趣!据我所知,您可以在运行时修改 appSettings,但如何更改我的配置我不知道!顺便说一句,感谢您的建议! - Chintan
3
修改web.config文件是一个不好的做法。每次修改都会导致Web应用程序重新启动! - Mad Pierre
1个回答

2
有一些.NET类专门用于更准确地访问几乎可以在.config文件中找到的所有内容(不仅限于appSettings或ConnectionStrings元素); 文档在这里:http://msdn.microsoft.com/en-us/library/x1et32w6.aspx 我不确定它们是否提供更改值的方法(请查看)。但是,有一个陷阱:配置文件旨在在启动时配置应用程序;换句话说,应用程序在启动时读取文件,然后再次读取文件,如果文件被手动或通过进程更改。对于asp.net应用程序,这意味着应用程序将自动重新启动(默认情况下;IIS设置)。
如果您真的想在运行时重新配置应用程序,那么每次保存文件时都会强制其重新启动。因此,在这种情况下,编写代码以在内存中进行所有更改(例如,使用xml类),然后一次性保存所有更改。
在app-pool中有一个设置,用于禁用配置更改时的自动重启;但是,如果您这样做,则应用程序不会在您进行配置更改时重新启动,并且您必须编写代码来重新启动它以使其获取这些更改。
如果您想自动序列化自定义配置类以生成XML元素,则此类可能非常有用:http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx 希望这可以帮助您。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接