【问题标题】:How to modify web.config section runtime?如何修改 web.config 部分运行时?
【发布时间】:2012-01-23 09:56:03
【问题描述】:

我创建了一个类,它直接映射到 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 使我的电脑挂起时,该属性是只读的!我可以做些什么来更改文件名运行时?

【问题讨论】:

  • 一小时内两题同名?您应该编辑原始问题,而不是创建新问题。 stackoverflow.com/questions/8968924/…(如果标题差异很大,请修改标题)
  • 我认为它与`appSettings`有关!系统配置,我渴望自己的配置!据我所知,您可以修改appSettings 运行时,但如何更改我自己不知道的配置!顺便感谢您的建议!
  • 写入 web.config 是个坏主意。每次更改时,网络应用都会重新循环!

标签: c# asp.net xml


【解决方案1】:

.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

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2010-10-17
    • 2013-03-17
    • 2023-03-18
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多