代码之家  ›  专栏  ›  技术社区  ›  marc_s MisterSmith

处理开发时web.config冲突

  •  1
  • marc_s MisterSmith  · 技术社区  · 7 年前

    我正在寻找一种方法来应对这个挑战:我们是一个地理位置分散的开发团队,使用ASP.NETWebAPI和Angular来构建一个Web应用程序。

    web.config 转换来为测试、转移和生产设置适当的连接字符串(我已经在这么做了),但这不是我要说的。

    由于目前无法控制的原因,我们

    • 一些开发人员使用 server=(local);database=OurDB 作为它们的连接字符串
    • 其他开发人员在他们的位置使用中央开发人员SQL Server,使用 server=someserver.mycorp.com;database=OurDB
    • 还有一些异国情调的案子

    我正在寻找一种方法来处理这件事-我希望我可以

    • 钩住Git pull进程并自动更新 web.config文件

    • 以某种方式引用一个连接字符串(或外部配置文件),例如我当前登录的用户名或类似的东西

    1 回复  |  直到 7 年前
        1
  •  1
  •   mason Tim Schmelter    7 年前

    真正的诀窍是,大多数旧的应用程序没有一个根来检索配置,因此您必须重构应用程序以利用灵活的配置系统。对于暂存/生产环境,您可能仍然希望使用web.config中的配置。下面的代码可以为您提供一种构造它的基本方法:

    public class MyApplicationConfiguration
    {
        public string MainConnectionString { get; set; }
    }
    
    public class ConfigurationRetriever
    {
        public MyApplicationConfiguration GetConfiguration()
        {
            // You might look for the absence or presence of an environment variable to determine this
            bool isLocalDevelopment = IsApplicationLocalDevelopment();
    
            var config = new MyApplicationConfiguration();
    
            if(isLocalDevelopment)
            {
                config.MainConnectionString = Environment.GetEnvironmentVariable("MyApplication_MainConnectionString");
    
                //or get it from a JSON file or XML file or config database
            }
            else
            {
                config.MainConnectionString = ConfigurationManager.ConnectionStrings["MainConnectionString"].ConnectionString;
            }
        }
    }
    

    与其滚动自己的配置构建逻辑,不如重构应用程序以利用 Microsoft.Extensions.Configuration . 它不仅仅适用于.NET内核。它适用于.NET标准。因此,您甚至可以在旧的ASP.NET应用程序中使用它。要读取web.config,您可能需要使用Microsoft.Extensions.Configuration.Xml。或者您可以编写自己的适配器,从ConfigurationManager中提取值。我做了一个基本的测试,结果和预期的一样。

    推荐文章