Различные настройки *.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. Опять же, это еще одна настройка, которая не имеет окончательного результата.
Я не видел никаких решений для моих конкретных проблем в отношении управления конфигурациями между членами команды и между ветвлением/слиянием.
Ответы
Ответ 1
В частности, для веб-сервера VS имеет флажок "Применить настройки сервера ко всем пользователям (хранить в файле проекта)" - если не отмечен, то этот параметр сохраняется в вашем локальном файле .csproj.user, поэтому каждый может иметь собственные настройки там.
Для строк подключения вы можете иметь файл "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 скопировала его в каталог bin.
Ответ 2
Если я правильно понял ваш вопрос, вы бы в основном хотели исключить ваш файл app.config/web.config/некоторых других файлов? По какой-то причине это похоже на скрытый вариант...
Наконец, мы нашли ответ на нашу аналогичную проблему, выбрав файлы .config в обозревателе решений и нажав (Visual Studio) File
→ Source Control
→ Exclude selection from Source Control
.
Это позволит сохранить выбранные файлы и перезаписать другие файлы разработчиков.
(Примечание: это работает в VS2010, я не могу гарантировать, что этот вариант существует в 2012 году)
Ответ 3
У меня была аналогичная проблема, когда у меня было 3 базы данных для 3-х веток для 3-х сред.
Сервер производства == > Производственная БД == > prod branch == > Строка подключения Prod
Сервер тестирования == > Мастер-БД == > Мастер-ветвь == > основная строка подключения
local Development == > локальная БД == > ветвь разработчика == > строка подключения разработчика...
Внутри папки .git есть git hooks, где вы можете помещать скрипты в выполнение всякий раз, когда вы проверяете ветку. У меня есть post-checkout script, который выполняется каждый раз при проверке и который обновляет строку подключения для меня, что избавляет меня от ручных изменений в файле web.config:
!/Bin/bash
. конфиг
eval $(git branch | grep "| sed" s///")
sed -es/{SERVER}/$server/g -es/{DATABASE}/$database/g -es/{USER}/$user/g -es/{PASS}/$pass/g -es/{SITE_TYPE}/$site_type/g\