2013-03-26 4 views
12

Этот вопрос является добрым из двух в одном, но оба они связаны с одной и той же проблемой.Различные настройки * .csproj/* .config для каждого члена команды и ветви

Мы являемся командой из 10 разработчиков, некоторые разработчики предпочитают использовать полный экземпляр IIS, в то время как другие предпочитают использовать IIS-Express. Есть и достоинства в использовании, например, IIS наиболее близко напоминает производство, в то время как IIS-Express позволяет отлаживать Edit-and-Continue.

В дополнение к 10 команде разработчиков, мы используем управление источником, и у нас есть ветвящаяся структура. Каждая ветка может иметь разные настройки web.config/app.config, такие как строки подключения к базе данных. Разработчик может работать с несколькими филиалами один раз, поэтому у нас обычно есть одна база данных на каждую ветку, мы рассматриваем разработчиков, имеющих локальные базы данных, но столкновение имен все еще остается проблемой независимо от подхода (т.е. у разработчика может быть 2 локальные базы данных, по одному для каждой ветки).

Первый выпуск - это тот, который содержит файлы csproj, в частности настройки веб-сервера. Если один разработчик проверяет файл csproj, который использует IIS-Express, а другой разработчик делает Get Latest, он перезаписывает их конфигурацию, тратит время и создает разочарование.

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

Вторая проблема связана с конфигурационными файлами, файлы конфигурации хранятся в исходном элементе управления (как и любой другой файл), поэтому, когда мы разветвляем-слияние, эти файлы должны обновляться вручную после этого. Я знаю, что для конфигурационных файлов существуют преобразования Debug и Release, в которых у нас могут быть разные строки соединений, но это не решает проблему для двух отдельных разработчиков, которые могут работать в одной ветви, но с разными строками подключения.

Очевидное решение для этого - все имеют одинаковые настройки всегда, но некоторые разработчики могут захотеть использовать экземпляр LocalDB, другие могут захотеть использовать SQL-Express, а промежуточный сервер использует полнофункциональный экземпляр SQLServer. Опять же, это еще одна настройка, которая не имеет конечного результата.

Я не видел решений для решения конкретных проблем, связанных с управлением конфигурациями между членами команды и между ветвлением/слиянием.

+0

Я склоняюсь к тому, чтобы заставить людей иметь ту же среду. Тонкие различия между веб-серверами или версиями баз данных могут означать разницу между функцией, работающей или нет в производстве (ужасный «работает на моей машинной» синдроме). IIS (или IIS Express) против Кассини - большая. Но если вы избежите любых шаблонов, которые потенциально могут быть проблемой, я полагаю, вы, вероятно, будете в порядке. –

+0

Я согласен, что это был бы прочный подход, чтобы все использовали одно и то же, если бы мы могли заставить всех согласиться с тем, что должно быть. К сожалению, я не могу сказать другим, как работать. – Matthew

ответ

6

Специально для веб-сервера, VS имеет галочкой «Применить настройки сервера для всех пользователей (магазин в файл проекта) "- если не отмечен, то этот параметр сохраняется в локальном файле .csproj.user, поэтому каждый может иметь свои собственные настройки.

Для строк подключения у вас может быть «пользователь».config "на каждом компьютере (не в исходном управлении), где разработчик может вставить строку своего подключения. Основной файл конфигурации может просто загрузить этот файл, чтобы получить строку подключения. Есть несколько способов сделать это, но я «ве попытался это:

App.config or Web.config: 
<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <connectionStrings configSource="user.config"></connectionStrings> 
</configuration> 

user.config: 
<connectionStrings> 
    <add name="test" connectionString="Server=.;Database=...;"/> 
</connectionStrings> 

Если это приложение для Windows, вы бы установить„копировать в выходной каталог“собственности на файл user.config, так что Visual Studio будет скопировать его в каталог бен.

+0

Благодарим за это, я никогда не замечал флажок «Применить настройки сервера ко всем пользователям (хранить в файле проекта)». Я думаю, что я могу взломать предложение user.config. Благодаря! – Matthew

2

Если я правильно понял ваш вопрос, вы бы в основном хотели исключить ваш файл app.config/web.config/некоторые другие файлы? По какой-то причине это похоже на скрытый вариант ...

Наконец-то мы нашли ответ на нашу аналогичную проблему, выбрав файлы .config в обозревателе решений и нажав (Visual Studio) File ->Source Control ->Exclude selection from Source Control.

Это приведет к тому, что выбранные файлы будут проверены и перезаписаны файлы другого разработчика.

(Примечание: это работает в VS2010, я не могу делать какие-либо гарантии того, что этот вариант существует в 2012 году)

+0

Сортировка, наши файлы web.config являются гигантскими. единственное, что меняется регулярно, это строки соединения, а также несколько других настроек. Проблема, если я исключаю их из исходного элемента управления, если кто-то добавляет новый параметр или раздел web.config, это изменение не распространяется никому другому, и каждый должен обновить свои конфиги, если они начнут работать над этой ветвью. – Matthew

+0

Почему бы не поместить все содержимое переменной web.config в отдельные файлы, на которые ссылаются в основном файле web.config, и сохранить эти файлы только локально - не проверяется. – Floremin

+0

@Matthew true, это не идеальное решение, но для нас это избавился от огромной головной боли ... отдельные файлы .config могут стать лучшим решением для вас, я просто подумал, что смогу использовать в своих двух центах решение, которое мы используем ... :) –

0

у меня была аналогичная проблема, где я имел 3 базы данных для 3 филиалов в течение 3 сред.

Производство сервера ==> Производство БД ==> ветвь лезвием ==> Строка подключения Prod Сервер тестирования ==> Мастер-БД ==> Мастер-ветвь ==> основная строка подключения локальная разработка ==> локальная БД ==> ветвь разработчика ==> строка подключения разработчика ...

Внутри папки .git есть git-крючки, в которые вы можете поместить скрипты для выполнения всякий раз, когда вы проверяете ветку. У меня есть после оформления заказа скрипт, который выполняет сама каждый раз, когда я проверка и что строка соединения обновления для меня, так что спасает меня от изменений вручную в файл web.config:

/бен/Баш

. конфиг Eval $ (мерзавец филиал | Grep "" | СЭД "с/ //")

СЕПГ -es/{SERVER}/$ сервер/г -es/{DATABASE}/$ базы данных/г - es/{USER}/$ user/g -es/{PASS}/$ pass/g -es/{SITE_TYPE}/$ site_type/g \

Смежные вопросы