2013-03-26 12 views
12

To pytanie jest rodzaju dwóch w jednym, ale oba dotyczą tego samego problemu.Różne ustawienia * .csproj/* .config dla każdego członka zespołu i oddziału

Jesteśmy zespołem 10 deweloperów, niektórzy programiści wolą korzystać z pełnych wystąpień usług IIS, podczas gdy inni wolą korzystać z IIS-Express. Istnieją zalety korzystania z obu, na przykład usługi IIS najbardziej przypominają produkcję, podczas gdy IIS-Express umożliwia debugowanie edycji i kontynuowania.

Oprócz 10 zespołów roboczych programistów używamy kontroli kodu źródłowego, a my mamy strukturę rozgałęzień. Każda gałąź może mieć różne ustawienia web.config/app.config, takie jak ciągi połączeń z bazą danych. Deweloper może pracować w więcej niż jednym oddziale, więc zazwyczaj mamy jedną bazę danych na oddział, patrzymy na programistów posiadających lokalne bazy danych, ale kolizja nazewnictwa wciąż stanowi problem, niezależnie od podejścia (np. Programista może mieć 2 lokalne bazy danych, po jednym dla każdego oddziału).

Pierwszy problem to ten z plikami csproj, w szczególności z ustawieniami serwera WWW. Jeśli jeden programista sprawdza w pliku csproj, który używa IIS-Express, a drugi programista wykonuje Pobierz najnowszą, nadpisze ich konfigurację, marnując czas i powodując frustrację.

Oczywiście najłatwiejszym rozwiązaniem byłoby zmusić wszystkich do korzystania z jednego narzędzia, jednej konfiguracji, ale wolałbym tego nie robić, szczególnie w przypadku czegoś, co nie ma wpływu na wynikowy wynik (skompilowany kod).

Drugi problem dotyczy plików konfiguracyjnych, pliki konfiguracyjne są przechowywane w sterowaniu źródłowym (tak jak każdy inny plik), więc kiedy wykonujemy rozgałęzienia, pliki te muszą być później ręcznie aktualizowane. Wiem, że istnieją transformacje Debug i Release dla plików konfiguracyjnych, które mogłyby mieć różne ciągi połączeń w obu, ale to nie rozwiązuje problemu, ponieważ dwaj indywidualni programiści mogą pracować w tej samej gałęzi, ale z różnymi ciągami połączeń.

Oczywistym rozwiązaniem jest to, że wszyscy mają zawsze takie same ustawienia, ale niektórzy programiści mogą chcieć użyć instancji LocalDB, inni mogą chcieć korzystać z SQL-Express, podczas gdy serwer pomostowy wykorzystuje pełną instancję SQLServer. Ponownie, jest to kolejne ustawienie, które nie ma wpływu na końcowy wynik.

Nie widziałem żadnych rozwiązań dla moich konkretnych problemów związanych z zarządzaniem konfiguracjami między członkami zespołu oraz między rozgałęzianiem/łączeniem.

+0

Mam skłonność do zmuszania ludzi do posiadania tego samego środowiska. Subtelne różnice między serwerami lub wersjami bazy danych mogą oznaczać różnicę między funkcjami, które działają lub nie są produkowane (przerażający syndrom "działa na moim komputerze"). IIS (lub IIS Express) kontra Cassini jest tam duży. Ale jeśli unikniesz jakichkolwiek wzorców, które potencjalnie mogłyby być problemem, prawdopodobnie będziesz w porządku. –

+0

Zgadzam się, że byłoby to solidne podejście, aby każdy użył tego samego, jeśli moglibyśmy przekonać wszystkich, co to powinno być. Niestety nie jestem w stanie powiedzieć innym, jak pracować. – Matthew

Odpowiedz

6

Specjalnie dla serwera WWW, VS ma pole wyboru „Zastosuj ustawienia serwera dla wszystkich użytkowników (w sklepie plik projektu) "- jeśli odznaczone, ustawienie jest przechowywane w lokalnym pliku .csproj.user, dzięki czemu każdy może mieć tam swoje własne ustawienia.

W przypadku ciągów połączeń możesz mieć "użytkownika".config "plik na każdym komputerze (nie w kontroli źródła), gdzie programista może umieścić swój ciąg połączenia. Główny plik konfiguracyjny może po prostu załadować ten plik, aby uzyskać ciąg połączenia. Istnieje kilka sposobów na to, ale ja Wcześniej próbowałem:

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> 

Jeśli było to aplikacja systemu Windows, można ustawić "Copy to Output directory" na własność pliku user.config tak, że Visual Studio będzie skopiować go do katalogu bin.

+0

Dzięki temu nie zauważyłem pola wyboru "Zastosuj ustawienia serwera dla wszystkich użytkowników (przechowuj w pliku projektu)". Myślę, że mogę zhakować wokół sugestii pliku user.config. Dzięki! – Matthew

2

Jeśli dobrze rozumiem twoje pytanie, zasadniczo chciałbyś wykluczyć możliwość odrzucenia pliku app.config/web.config/niektórych innych plików? Z jakiegoś powodu wydaje się, że jest to ukryta opcja ...

W końcu znaleźliśmy odpowiedź na nasz podobny problem, wybierając pliki .config w eksploratorze rozwiązań i klikając (Visual Studio) File ->Source Control ->Exclude selection from Source Control.

Spowoduje to zablokowanie zaznaczania wybranych plików i nadpisywanie plików innych deweloperów.

(Uwaga: to działa w VS2010, nie można dokonywać żadnych gwarancji, że ta opcja istnieje w 2012)

+0

Sortuj, nasze pliki web.config są gigantyczne. jedyne co się zmienia regularnie to ciągi połączeń plus kilka innych ustawień. Problem polega na tym, że jeśli wykluczyć je z kontroli źródła, jeśli ktoś doda nowe ustawienie lub sekcję web.config, ta zmiana nie będzie propagowana do nikogo innego i wszyscy będą musieli zaktualizować swoje konfiguracje, jeśli zaczną pracować nad tą gałęzią. – Matthew

+0

Dlaczego nie umieszczać wszystkich zmiennych treści web.config w osobnych plikach, które są przywoływane w głównym pliku web.config, i przechowywać te pliki tylko lokalnie - niezaznaczone. – Floremin

+0

@Matthew prawda, to nie jest idealne rozwiązanie, ale dla nas jest pozbyłem się ogromnego bólu głowy ... oddzielne pliki .config mogą okazać się lepszym rozwiązaniem dla ciebie, po prostu pomyślałem, że wpadnę w moje dwa centy na rozwiązanie, z którego korzystamy ... :) –

0

miałem podobny problem, gdzie miałem 3 baz danych dla 3 oddziałów przez 3 środowiskach.

Server

Produkcja ==> DB Produkcja ==> gałąź prod ==> Ciąg połączenia próbnego Serwer testowy ==> Główny DB ==> Główny oddział ==> główny ciąg połączenia Rozwój lokalny ==> lokalny DB ==> gałąź dewelopera ==> ciąg połączenia z deweloperem ...

Wewnątrz folderu .git znajdują się haki git, w których można umieścić skrypty do wykonania za każdym razem, gdy pobierasz oddział. Mam skrypt po realizacji transakcji, która wykonuje sobie za każdym razem Checkout i że ciąg połączenia aktualizacje dla mnie tak że ratuje mnie od ręcznych zmian w pliku web.config:

/bin/bash

. config eval $ (git branch | grep "" | sed "s/ //") Serwer

sed -es/SERWER {}/$/g -es/{DATABASE}/$ database/g - es/{USER}/$ user/g -es/{PASS}/$ pass/g -es/{SITE_TYPE}/$ site_type/g \

Powiązane problemy