如何从通用.NET应用程序修改web.config文件的自定义部分?

时间:2013-10-29 23:58:25

标签: c# .net winforms web-config

我有一个WinForm派生的应用程序(请注意不是ASP.NET Web应用程序),我需要修改任意web.config文件的自定义部分。例如,如果我的web.config是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <!-- General web.config stuff follows -->
  <system.web>
    <httpRuntime executionTimeout="110" maxRequestLength="1024" requestValidationMode="2.0" />
  </system.web>

  <MyConfigSection>
    <GeneralParameters>
      <param key="Var1" value="value1" />
    </GeneralParameters>
  </MyConfigSection>

</configuration>

我可以轻松修改一些默认参数,例如,对于maxRequestLength我会这样做,它会起作用:

//Path to the web.config file
string strWebConfigFile = @"C:\My files\web.config";

//Convert absolute path to virtual
var configFile = new FileInfo(strWebConfigFile);
var vdm = new VirtualDirectoryMapping(configFile.DirectoryName, true, configFile.Name);
var wcfm = new WebConfigurationFileMap();
wcfm.VirtualDirectories.Add("/", vdm);

//Open web.config file
System.Configuration.Configuration config = 
    System.Web.Configuration.WebConfigurationManager.OpenMappedWebConfiguration(wcfm, "/");
if (config != null)
{
    System.Configuration.ConfigurationSection system_web = 
        config.GetSection("system.web/httpRuntime");

    PropertyInformation pi = system_web.ElementInformation.Properties["maxRequestLength"];

    pi.Value = 1234;    //Set new value

    //Save
    config.Save(ConfigurationSaveMode.Modified);
}

问题是当我尝试修改自定义部分时。比如说,如果我想用Var1重写value2参数的值,请执行以下操作:

System.Configuration.ConfigurationSection genParams = config.GetSection("MyConfigSection/GeneralParameters");

返回null,如果我只用MyConfigSection调用它,它会给我这个例外:

  

为其创建配置节处理程序时发生错误   MyConfigSection:无法从中加载“MyWebApp.Configuration”类型   assembly'System.Web,Version = 4.0.0.0,Culture = neutral,   公钥= N”。

我该怎么做才能添加“配置部分处理程序”?

1 个答案:

答案 0 :(得分:1)

你必须用XmlDocument打开它,并使用它,抱歉。这就是我们破解这个问题的方法 - 对不起,我不能自由地给你代码。