C# ASP.Net-对数据库和应用程序设置使用单独的配置文件

C# ASP.Net-对数据库和应用程序设置使用单独的配置文件,c#,asp.net,C#,Asp.net,我有一个asp.net项目,它使用的是在几个不同的客户端服务器上使用的实体框架。这意味着每个连接字符串和应用程序设置都有不同的web.config。 这不是一个问题,但我最近更改了一些更改web.config文件的内容,我必须手动调整每个客户端的web.config文件,我还必须在更新中排除web.config文件,以确保它们自己的文件不会被覆盖 我想实现的是将这些设置存储在另一个配置文件中,项目可以拾取并使用该文件。可能在Globals应用程序上,启动程序会获取这些文件并将其导入/覆盖当前的w

我有一个asp.net项目,它使用的是在几个不同的客户端服务器上使用的实体框架。这意味着每个连接字符串和应用程序设置都有不同的web.config。 这不是一个问题,但我最近更改了一些更改web.config文件的内容,我必须手动调整每个客户端的web.config文件,我还必须在更新中排除web.config文件,以确保它们自己的文件不会被覆盖

我想实现的是将这些设置存储在另一个配置文件中,项目可以拾取并使用该文件。可能在Globals应用程序上,启动程序会获取这些文件并将其导入/覆盖当前的web.config文件

基本上,我不想影响在整个项目中使用连接字符串和ConfigurationManager.AppSettings的当前代码,但我确实希望能够让每个客户端的web.config文件更新,并对某些设置使用单独的文件

注意:我没有直接发布到每台服务器的权限,因此我不能简单地为每台服务器编写不同的deploy web.config。我必须在本地发布文件,以zip格式存储,并在服务器上自动执行相应的下载和解压缩程序

编辑: 请说明这是否被认为是一个坏主意,但我的想法是在Global.asax Application_Start method中加入类似的内容:

  • 配置文件存在吗
  • 如果否,请创建文件并将所有当前设置附加到web.config中
  • 如果是,请打开这些设置并将其导入当前web.config,覆盖原始值

  • 希望在几周后,在我要求所有客户端执行手动更新后,他们将获得此代码,并且我可以开始在更新中包含web.config。

    在VS中,在“构建”菜单中,最后一项是Configuration Manager

    在这里,您可以指定各种不同的发布环境,每个环境都有自己的web.config转换

    这通常用于生产/暂存/测试环境。但是,我看不出为什么您不能使用它,并且为每个服务器/环境都有一个配置文件

    然后,您需要为每个环境创建转换,方法是右键单击web.config,然后选择AddConfigTransform

    然后,您安装的每个环境都可以覆盖主web.config中的设置。(现在用作模板/默认设置)

    e、 g。 在Web.EnvironmentA.Config中

    <add key="ConnectionString" value="ConStringA" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
    
    
    
    在Web.EnvironmentB.Config中

    <add key="ConnectionString" value="ConStringB" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
    
    
    
    然后在发布时,只需设置要使用的配置文件。如果您使用Azure或VS publish方法,它将保存这些设置中的每一个,这样您就可以轻松地推送到相关环境


    在开始到处发布之前,请确保您首先按照您的意图对其进行测试;)

    没有什么强迫你使用web.config来存储设置,这只是一种方便。将它放在另一个文件、数据库、注册表中,从web服务等获取它。您可以使用
    文件和/或
    configSource
    属性将其拆分为一个主web.config文件和其他.config文件,每个客户端都有不同的文件。尽管connectionstring的名称与dbcontext的名称相同,但请参见With EF,并且此链接非常完美。我不想丢失此链接或应用程序设置。这些可以被项目覆盖吗?@DanielJ.G。那就行了。但问题是,它需要对web.config进行更改,因此再次手动更改以及这些配置文件需要从更新中排除,以便不会覆盖客户端文件。我的目标是在不中断客户端的情况下更改此设置。对问题进行了编辑请参见问题最后一段中的注释,无法直接发布。另外,如果你想象30多个客户,那么这样做是没有意义的。啊,我错过了那个编辑。嗯,这种部署机制很糟糕!!我想一想……你是说我的还是你建议的那个?哈,它们不兼容,我就这么说吧!哪一个更糟糕是个人意见。。。