我的<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块上执行代码。还有其他方法可以做到这一点,我有不同的调试和发布配置吗?
答案 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>