Обработка времени разработки web.config конфликтов - PullRequest
0 голосов
/ 24 октября 2018

Я ищу способ справиться с этой проблемой: мы являемся географически разрозненной командой разработчиков, использующей ASP.NET Web API и Angular для создания веб-приложения.

То, что вызывает горе, это фактчто не все члены команды используют одну и ту же настройку базы данных для своей работы разработчика.Да, я знаю - я могу использовать web.config преобразования, чтобы установить правильные строки подключения для тестирования, подготовки и производства (и я уже делаю это) - но я не об этом говорю.

В настоящее время по независящим от нас причинам у нас

  • некоторые разработчики работают над локальным экземпляром SQL Server, используя server=(local);database=OurDB в качестве строки подключения
  • другие разработчики используют центральный разработчик SQL Server в своем расположении, используя что-то вроде server=someserver.mycorp.com;database=OurDB
  • и несколько экзотических случаев с еще другими настройками

Теперь каждый раз, когда кто-то фиксирует изменение врепозиторий Git, и случается также что-то изменить в web.config, его строка подключения фиксируется в репо.Поэтому, когда я продолжаю тянуть этот последний коммит, мои настройки на локальном сервере БД перезаписываются настройками этого другого парня.

Я ищу способ справиться с этим - я надеялся, что смогу

  • подключиться к процессу Git pull и автоматически обновлять строку соединения web.config в соответствии с моими локальными потребностями всякий раз, когда я что-то извлекаю

  • как-то ссылается на соединениестрока (или внешний файл конфигурации), основанный, например, на имени моего текущего пользователя, вошедшего в систему, или что-то в этом роде

Но я не могу найти какой-либо способ сделать это.Мне было интересно, если мне нужно построить расширение VS, чтобы справиться с этим - какие-нибудь начала для этого?Кто-нибудь делал что-то подобное раньше и мог бы поделиться своим кодом?(или есть на Github)

1 Ответ

0 голосов
/ 25 октября 2018

Система конфигурации web.config, используемая в ASP.NET, недостаточно гибкая для поддержки более сложного сценария, который вы описали.Так зачем его использовать?Вы можете хранить конфигурацию в файлах в репозитории, по одному на разработчика.Или же они могут храниться вне репозитория или иным образом игнорироваться.

Реальная хитрость заключается в том, что большинство старых приложений не имеют единственного корня, который извлекает конфигурацию, поэтому вы должны реорганизовать свое приложение, чтобы использовать гибкую конфигурациюсистема.Для ваших промежуточных / производственных сред вы, вероятно, все еще хотите использовать конфигурацию в 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 Core.Это для .NET Standard.Таким образом, вы можете использовать его даже в своих старых приложениях ASP.NET.Для чтения web.config вы, вероятно, можете использовать Microsoft.Extensions.Configuration.Xml.Или вы можете написать свой собственный адаптер, который извлекает значения из ConfigurationManager.Я провел базовый тест, и он сработал, как и ожидалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...