升级时的web.config最佳实践

时间:2011-02-17 19:34:22

标签: c# .net web-config

我发送了一个应用程序,我让客户在web.config中对连接字符串进行更改。

当我升级我的应用程序时,这会引起烦恼,因为我不想用我的覆盖他们的值。

当升级.net版本时,这尤其糟糕。

人们通常如何处理这种情况?

例如,他们是否以某种方式拆分了web.config,以便客户数据不再是其中的一部分?

4 个答案:

答案 0 :(得分:3)

我从来没有听说有人让web.config可以访问和写入客户或任何其他商业人士。你只是在寻找麻烦。

听起来您可能想要开发一个小型前端(Web)实用程序,以允许它们在表单中提交值并保存到数据库中。然后让您的应用程序访问数据库以获取这些值,而不是web.config。

这似乎更像是一个内容管理问题。

答案 1 :(得分:0)

有几种方法可以解决这个问题。我会提两个。一个是关于您的交付过程。另一个实际上涉及web.config。

1)不要将web.config作为“代码”发送。考虑它“配置”。这并不适用于所有场景(实际上,基于客户的场景是我想到的糟糕场景)。如果您正在进行“生产”,您可以同意让他们对web.config的内容负责(并且一个好的做法是尽可能多地尝试重构到machine.config)。这样,连接字符串之类的东西就成了生产问题,而不是开发问题。

2)使用configSource属性。 ASP.NET 2.0支持使用configSource属性外部化属性。很难将所有web.config作为“生产问题”(在向客户方案交付时,他们可能不是所有这些中的专家)。

所以你像这样外化它。这是您当前的appSettings部分,例如:

<appSettings>
  <add key="EnableFrobbing" value="false" />
  <add key="ExpectFooingFrom" value="fooingserver@domain.com " />
</appSettings>

如果这些是您想要外部化的设置,那么您的新货件不会覆盖客户设置,请将其替换为:

<appSettings configSource="App_Data\WebConfigXML\appSettings.xml"/>

据我所知,只有相对路径。

参考文献:

(显示该属性是ASP.NET 2.0中的新增功能) http://msdn.microsoft.com/en-us/library/system.configuration.sectioninformation.configsource%28v=VS.80%29.aspx

http://www.codeproject.com/KB/aspnet/Manage_Webconfig.aspx

http://trycatchfail.com/blog/post/2008/09/25/Webconfig-magic-configSource-and-file-attributes.aspx

答案 2 :(得分:0)

将配置文件拆分为两个。一个为您而另一个为您的客户。 客户可自定义的所有配置都会进入客户配置文件,其他所有内容都会进入您的配置文件。

这样您就可以轻松升级/修改配置文件,而不会覆盖客户。

您可以使用SectionInformation.ConfigSource元素声明关联的配置文件。 This blog post向您展示了如何做到这一点。

我甚至在this project中使用它来检测ASP.NET中外部配置的更改。

答案 3 :(得分:0)

你有几个选择。当您将应用程序推送到他们的环境时,最好的IMO将不会发布Web配置。如果需要编写新的配置节/设置,您可以封装一些逻辑以编程方式在新的帮助应用程序中编写新配置并将其作为部署后操作运行,或者您可以将新设置粘贴到e中邮件并发送给你信任的另一端将其置于配置中。我建议在99%的情况下反对第二种选择;交叉电线有很多可能或者只是被忽略,那么当系统发生故障时,你的错是因为配置没有进入电线。