C#:在运行时修改web.config

时间:2015-03-11 09:47:12

标签: c# asp.net configuration web-config appharbor

我的<appSettings>部分中有一个包含我的连接字符串的条目。默认情况下,它会在C:驱动器的根目录中查找该文件。

  <appSettings>
      <add key="EnvironmentFile" value="C:\environment.extension" />
  </appSettings>

我需要以编程方式修改条目的值,因为应用程序将部署到不同的服务器(Appharbor),我无法访问C驱动器。我将环境文件移动到app目录的根目录,这意味着我需要修改EnvironmentFile的appSettings值。这是我到目前为止所尝试的内容,因为我无法在web.config中添加相对值,所以我采用了以下内容,例如

value="~/environment.extension"

Default.aspx

protected void Page_Load(object sender, EventArgs e)
{
        if(ConfigurationManager.AppSettings["EnvironmentFile"] == null)
        {
            Configuration config = WebConfigurationManager.OpenWebConfiguration("~");
            config.AppSettings.Settings.Add("EnvironmentFile", AppDomain.CurrentDomain.BaseDirectory + @"environment.extension");

            config.Save(ConfigurationSaveMode.Minimal);
            ConfigurationManager.RefreshSection("appSettings");
        }

        if (IsPostBack == false)
        {
            //--some business logic here that gets data from the database
        }
}

在调试模式下,它会修改我的web.config,但会抛出异常,因为它已在if块上执行代码。还有其他方法可以做到这一点,我有不同的调试和发布配置吗?

1 个答案:

答案 0 :(得分:0)

是的,还有另一种方法可以做到这一点。

如果右键单击Visual Studio中的Web.Config,您将看到“添加配置转换”选项。这允许您为各种配置创建转换。新添加的Web.XXX.config files将有一些如何转换条目的示例,但一个简单的示例是:

在你的基础Web.Config中:

  <appSettings>
      <add key="Mode" value="Development" />
  </appSettings>

然后在WebConfig.LiveRelease.config文件中你可能会这样:

<appSettings>
    <add key="Mode" value="Live" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
</appSettings>