如何以编程方式修改ASP.NET MVC和C#应用程序中的web.config?

问题描述:

这是我的ASP.NET MVC应用程序中的global.asax.cs文件。我想以编程方式修改web.config中的属性。但发生此错误:如何以编程方式修改ASP.NET MVC和C#应用程序中的web.config?

执行system.web/roleManager的配置节处理程序时发生错误。

代码:

using System; 
using System.Collections.Generic; 
using System.Configuration; 
using System.Linq; 
using System.Web; 
using System.Web.Configuration; 
using System.Web.Http; 
using System.Web.Mvc; 
using System.Web.Optimization; 
using System.Web.Routing; 

namespace MyApp 
{  
    public class MvcApplication : System.Web.HttpApplication 
    { 
     protected void Application_Start() 
     { 
      AreaRegistration.RegisterAllAreas(); 
      WebApiConfig.Register(GlobalConfiguration.Configuration); 

      FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
      RouteConfig.RegisterRoutes(RouteTable.Routes); 

      BundleConfig.RegisterBundles(BundleTable.Bundles); 
      AuthConfig.RegisterAuth(); 

      UsingRoleManagerSection.test(); 
     } 
    } 

    public static class UsingRoleManagerSection 
    { 
     public static void test() 
     { 
      try 
      { 
       // Set the path of the config file. 
       string configPath = "/Web.config"; 

       // Get the Web application configuration object. 
       Configuration config = WebConfigurationManager.OpenWebConfiguration(configPath); 

       SystemWebSectionGroup web = (SystemWebSectionGroup)config.GetSectionGroup("system.web"); 


       web.ForceDeclaration(true); 
       web.RoleManager.Enabled = true; 
       web.RoleManager.SectionInformation.ForceSave = true;    
       config.Save(ConfigurationSaveMode.Modified); 
      } 
      catch (Exception ex) 
      { 

      } 
     } 
    } 
} 

RoleManager.SectionInformation.IsLocked是真实的。我曾尝试通过设置将其更改为false:

configSection.SectionInformation.AllowDefinition = ConfigurationAllowDefinition.Everywhere; 
configSection.SectionInformation.AllowOverride = true; 

但在第一行出现此错误:锁定时

的ConfigurationSection属性不能进行编辑。

答案是:“configPath”!!!!! 应该是这样的:

string configPaht = "~";