如何在源代码管理下轻松地对本地Web.config进行特定更改

时间:2011-02-10 17:27:34

标签: asp.net web-config

我是一个处理ASP.NET Web应用程序的10人小组的成员,但他是卫星办公室(与主办公室不同的域)中唯一的开发人员。在Web.config中,我需要进行更改以使Web应用程序在我的特定域上工作(对<identity>元素和数据库连接字符串的更改),这与我团队中其他人使用的不同。

我无法更改原始的Web.config文件,因为这会弄乱我团队中的其他人。 MsBuild Web.config转换看起来很有前途,但只有在部署Web应用程序时才会起作用(我只是将IIS指向应用程序的根目录)。我探讨了手动运行<TransformXml>构建步骤,但它不会覆盖我的本地Web.config文件(Access is Denied error)

如果不修改源代码管理中的内容,我该如何轻松地对本地Web.config文件进行一些选择性更改?

2 个答案:

答案 0 :(得分:1)

要求进行本地更改的最常见部分是 connectionStrings appSettings 。对于这两个部分,.NET框架允许存储在单独的文件中。

然后,您只需将这些单独的文件保留在源代码控制之外(忽略,获取一次然后隐藏,禁用文件版本控制......您使用的任何风味源控件)。

例如,

<configuration>
    <connectionStrings configSource="connections.config"/>
</configuration>


<connectionStrings>
    <add name="Name"  
     providerName="System.Data.ProviderName" 
     connectionString="My;Personal;Connection;String;" />
</connectionStrings>

答案 1 :(得分:0)

我不知道任何不修改源代码管理中的内容的解决方案。但是,您可以考虑以下一些可能适用于您的情况的选项:

Global.asax条件设置:

void Session_Start(object sender, EventArgs e)
{
  if (HttpContext.Current.Server.MachineName == "JOE"  ){
    //my development machine
    Application["mysetting"] = "myspecial setting"; 
  }else{
    // ... 
  }
}

多个web.config s

有时您对不同的服务器有不同的web.config s。管理每个设置可能会成为一场噩梦,所以有关堆栈溢出的问题(无法找到它!抱歉)建议这样做,其中正确的web.config.<setting>被复制粘贴到主web.config文件中合适的。

Application/
  web.config.devserver
  web.config.joebrown
  web.config.production

动态更改web.config设置

有关详细信息,请参阅Stack Overflow上的帖子:asp.net managing multiple web.config files

public static string GetConnString()
{
    string connString = ConfigurationSettings.AppSettings[GetConfigKey("database")];
    return connString;
}

public static string GetConfigKey(string baseKey)
{
    string str = baseKey;
    if (Dns.GetHostName().StartsWith("dinoch"))
    {
        str = str + "-dev";
    }
    else if (Dns.GetHostName().StartsWith("prodsrvr"))
    {
        str = str + "-prod";
    }
    return str;
}

<configuration>
   <appSettings>
     <add key="database-dev" value="server=(local)\vsdotnet;database=ASPXAPPS;Integrated Security=SSPI" />
     <add key="database-prod" value="server=(local)\vsdotnet;database=ASPXAPPS;Integrated Security=SSPI" />
   </appSettings>
</configuration>