Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 升级时的web.config最佳做法_C#_.net_Web Config - Fatal编程技术网

C# 升级时的web.config最佳做法

C# 升级时的web.config最佳做法,c#,.net,web-config,C#,.net,Web Config,我发送一个应用程序,让客户更改web.config中的连接字符串等 当我升级我的应用程序时,这会引起麻烦,因为我不想用我的覆盖它们的值 当升级.net版本时,这种情况尤其糟糕 人们通常如何处理这种情况 例如,他们是否以某种方式将web.config拆分,从而使客户数据不再是web.config的一部分?我从未听说有人将web.config设置为可供客户或任何其他业务人员访问和写入。你只是自找麻烦 听起来您可能想开发一个小型前端(web)实用程序,允许他们以表单形式提交值并保存到数据库。然后让应用

我发送一个应用程序,让客户更改web.config中的连接字符串等

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

当升级.net版本时,这种情况尤其糟糕

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


例如,他们是否以某种方式将web.config拆分,从而使客户数据不再是web.config的一部分?

我从未听说有人将web.config设置为可供客户或任何其他业务人员访问和写入。你只是自找麻烦

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


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

我从未听说过有人让客户或任何其他商务人士可以访问和写入web.config。你只是自找麻烦

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


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

有几种方法可以解决这个问题。我会提到两个。一个是关于你的交付过程。另一个实际上涉及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>


有几种方法可以解决这个问题。我会提到两个。一个是关于你的交付过程。另一个实际上涉及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>


将配置文件一分为二。一个给你,另一个给你的客户。 客户可以自定义的所有配置都会进入客户配置文件,其他所有配置都会进入您的配置文件

这将使您能够轻松升级/修改配置文件,而不会覆盖客户的配置文件

可以使用元素声明关联的配置文件。告诉你怎么做


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

将配置文件一分为二。一个给你,另一个给你的客户。 客户可以自定义的所有配置都会进入客户配置文件,其他所有配置都会进入您的配置文件

这将使您能够轻松升级/修改配置文件,而不会覆盖客户的配置文件

可以使用元素声明关联的配置文件。告诉你怎么做


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

您有几个选项。IMO认为,最好的办法是在将应用程序推送到他们的环境时不发布web配置。如果需要编写新的配置节/设置,您可以封装一些逻辑,以编程方式在小助手应用程序中编写新配置,并将其作为部署后操作运行,也可以将新设置粘贴到电子邮件中,然后发送给另一端您信任的人,将其放入配置中。我建议在99%的情况下反对第二种选择;有很多可能会出现交叉连接或被忽略的情况,那么当系统出现故障时,这是您的问题,因为配置没有进入。您有几个选项。IMO认为,最好的办法是在将应用程序推送到他们的环境时不发布web配置。如果需要编写新的配置节/设置,您可以封装一些逻辑,以编程方式在小助手应用程序中编写新配置,并将其作为部署后操作运行,也可以将新设置粘贴到电子邮件中,然后发送给另一端您信任的人,将其放入配置中。我建议在99%的情况下反对第二种选择;有很多可能会出现交叉连接或被忽略的情况,那么当系统出现故障时,这是你的错,因为配置没有成功。

如果你正在编写“交钥匙”软件,由你开发,他们管理,那么你就无法避免让他们玩配置。这一点很好,KeithS。然而,我