我是一个处理ASP.NET Web应用程序的10人小组的成员,但他是卫星办公室(与主办公室不同的域)中唯一的开发人员。在Web.config中,我需要进行更改以使Web应用程序在我的特定域上工作(对<identity>
元素和数据库连接字符串的更改),这与我团队中其他人使用的不同。
我无法更改原始的Web.config文件,因为这会弄乱我团队中的其他人。 MsBuild Web.config转换看起来很有前途,但只有在部署Web应用程序时才会起作用(我只是将IIS指向应用程序的根目录)。我探讨了手动运行<TransformXml>
构建步骤,但它不会覆盖我的本地Web.config文件(Access is Denied error)
如果不修改源代码管理中的内容,我该如何轻松地对本地Web.config文件进行一些选择性更改?
答案 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>