2010-05-28 15 views
20

Z mandatem VS2010, aby web.config został uwzględniony w projekcie, w jaki sposób pozwolimy wszystkim zachować własny niestandardowy plik konfiguracyjny bez problemów z kontrolą źródła?Zarządzanie Web.config dla zespołów w VS2010 i TFS

Wcześniej po prostu zostawilibyśmy web.config poza naszym projektem, pozwalając każdemu zachować własną lokalną wersję web.config na swoim komputerze. Przenieśliśmy się do wersji VS2010, która zmusza mnie do dodania do mojego projektu pliku web.config w celu uruchomienia trybu debugowania. Ponieważ nasz projekt jest połączony z TFS, automatycznie dodaje on web.config do kontroli źródła i próbuje go utrzymać w ten sposób.

Czy istnieje sposób uruchamiania w trybie debugowania bez włączania pliku web.config w projekcie? Czy istnieje lepszy sposób zarządzania plikami konfiguracyjnymi?

+1

Ciekawe, jakie informacje w web.config różnią się między programistami? – itchi

+1

@itchi: Może być wiele rzeczy od połączeń DB do jakichkolwiek powiązań usług internetowych, ustawień aplikacji, autoryzacji itp. Może być tak wiele rzeczy, których nawet nie potrafię sobie wyobrazić. –

+0

Oto szybka naprawa (jeden krok w VS), ale nakłada na dewelopera obowiązek "monitorowania" zmian. Plik zostanie pozostawiony w projekcie zgodnie z wymaganiami. Zasadniczo mówisz programowi TFS, aby nie pobierał/wyewidencjonował/sprawdzał w tym konkretnym pliku przy użyciu "Cloak": http://stackoverflow.com/questions/9741975/how-can-i-always-block-checkinof-a- specific-file-in-tfs – Jonno

Odpowiedz

1

Jarrett,

Wszystko co mam jest anegdota o tym, jak poradzić sobie z sytuacją.

Mamy zespół 4 programistów.

Używamy rozwiązania kontroli źródła poza VS - TortoiseSVN. Każdy z nas utrzymuje nasz własny lokalny web.config, który jest zawarty w projekcie. Plik projektu znajduje się w repozytorium, ale ustawiliśmy web.config na status "Ignoruj ​​przy zatwierdzaniu".

Nie jestem pewien, jakiej kontroli kodu źródłowego używasz, ale subwersja z SVN Tortoise (która działa poza Visual Studio) działa dobrze dla naszego małego zespołu. Większość z nas programuje na dwóch osobnych maszynach ... jeden w biurze, jeden w domu ... więc kiedy się z tym zgadzasz, z tym, że mamy dwa serwery produkcyjne, mamy wygodnie do czynienia z 10 programami web.config na projekt.

Przy tym należy pamiętać, aby podczas konfigurowania nowego komputera programistycznego wprowadzić inny plik web.config dewelopera, w przeciwnym razie rozwiązanie nie zostanie załadowane poprawnie lub skonfigurować domyślny plik web.config, który nie zawiera odpowiednie ciągi połączenia i ustawienia aplikacji.

I ostatnia uwaga: Używamy IIS 7 do debugowania

+0

Niestety, używamy tutaj TFS2010, więc nie ma takiej samej elastyczności SVN. Żałuję, że nie miał prostej możliwości zignorowania pojedynczego pliku. – Jaeell

+0

Jarret, myślałem, że moja rada może nie być w pełni adekwatna, tylko pomyślałem, że podzielę się moim doświadczeniem –

1

tak ma dobrej odpowiedzi na to here .. I miałaś wyrejestrowany wielokrotne web.configs w VS2010, ale zastanawiam się, czy to ja dodano ponieważ zmian, które wprowadzili do web.conig ..

+0

Tak, sprawdziłem to i to zadziała, gdy przejdę na inny serwer. Ale nie chcę sprawdzać każdej wersji web.config każdego dewelopera (jak również tworzyć inny profil kompilacji), więc miałem nadzieję, że po prostu uniknę tego meldunku. – Jaeell

1

Użyłem szablonów T4, aby rozwiązać ten problem. Zamiast posiadania pliku web.config, masz web.tt, który generuje plik web.config. W pliku web.tt można wygenerować inny kod na podstawie nazwy maszyny lub bieżącego użytkownika.

+0

Chciałbym, jeśli możesz wskazać na pewne zasoby na ten temat, wiele słyszałem, ale nigdy nie grałem z T4 Templates – TJB

+0

ha ok, wystarczy. Zobaczę twój link i trochę automatyzacji;) http://letmebingthatforyou.com/?q=t4%20template – TJB

3

Nie widziałem dobrej odpowiedzi na zarządzanie różnymi plikami web.config na programistę z TFS do tej pory.

Jeśli jednak problemy, które powodują, że programiści wymagają różnych plików web.config są adresowane zamiast tego, zazwyczaj skutkuje to lepszymi wynikami niezależnie od wybranego systemu kontroli wersji.

Na przykład, mniejsze różnice między środowiskami programistów spowodują zmniejszenie liczby argumentów programu Works On My Machine (WOMM), a często będą również ograniczać zmiany konfiguracji dla środowisk innych niż rozwój (np. Testowanie, produkcja), co z kolei upraszcza wdrażanie i zmniejsza irytujące środowisko. błędy specyficzne dla konfiguracji.

W zależności od charakteru elementu konfiguracji zwykle stosuje się kilka różnych strategii w celu złagodzenia różnic między poszczególnymi środowiskami. Wiele z nich podejrzewam, że już mają odpowiedzi na przepełnienie stosu.

+0

Z całego serca się zgadzam. – NotMe

32

Mam nadzieję, że to pomoże komuś. Korzystam z tej metodologii od kilku ostatnich miesięcy. To naprawdę łatwe do zrobienia. Używam VS 2010 z TFS 2010. Złammy go:

  • Wszystkie pliki web config są teraz "DependentOn" the "web.config"
  • Każdy deweloper lub zespół potrzebuje własnego „[User/Zespół ] .Debug.config "
  • Pliki konfiguracyjne powinny zostać przekształcone, niezależnie od tego, czy jesteśmy" Publikowanie "w trybie zwolnienia, czy nie.

Oto jak to zrobić:

  1. prawym przyciskiem myszy projektu sieci Web, którą chcesz to zrobić i wybierz "Zwolnij Project" (nie "Usuń Projekt").

  2. Ponownie kliknij ten sam projekt WWW prawym przyciskiem myszy (powinien być teraz wyszarzony) i wybierz "Edytuj ... csproj". Spowoduje to otwarcie projektu w edytorze Xml.

  3. Przewiń w dół, aż znajdziesz sekcję z wszystkimi listingami "Web.config". Teraz skomentuj wszystkie elementy "DependentUpon" w Xml.

  4. Zamknij edytor Xml i zapisz zmiany. Następnie ponownie kliknij projekt prawym przyciskiem myszy i wybierz "Załaduj ponownie". Po przeładowaniu projektu zauważysz, że plik Web.configs nie "układa się" pod "Web.config". Jest to konieczne, aby "oszukać" TFS.

  5. Teraz skopiuj plik "Web.config", wklej go do tego samego projektu i zmień jego nazwę na "Web.base.config". To będzie używane do ponownego generowania Web.config za każdym razem (zakryte obok).

  6. Teraz wybierz plik Web.config i przejdź do "File -> Source Control -> Exclude Web.config from Source Control". Otwórz także Explorer sterowania źródłami (widok TFS Explorer) i znajdź lokalizację, w której znajduje się plik Web.config, i usuń go z TFS. Dzieje się tak, ponieważ Web.config zostanie ponownie wygenerowany za każdym razem, gdy budujesz projekt (który omówię w dalszej części).

  7. Teraz mamy zamiar utworzyć nowy plik kompilacji, które pomogą nam zregenerować Web.config żadnych wbudowanych typu, nawet te debugowania (czego web.config Transformed brakowało na początku). Utwórz nowy plik Xml w projekcie i zmień jego nazwę na "[YourProjectName] .wpp.targets". Ważne jest, aby nazwać dokładnie to, co nazywa się Twoim projektem, w tym wszystkie kropki, myślniki itp. (Np. My.Project.wpp.targets).

  8. Teraz wprowadź następujący plik Xml do nowego pliku. Nie martw się, jeśli zaczyna podkreślając błędy składniowe:

    <?xml version="1.0" encoding="utf-8"?> 
    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
        <UsingTask TaskName="TransformXml" 
           AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/> 
    
        <!-- Make sure web.config will be there even for package/publish --> 
        <Target Name="CopyWebConfig" BeforeTargets="Build;Rebuild"> 
         <Copy SourceFiles="Web.base.config" 
           DestinationFiles="Web.config" 
           OverwriteReadOnlyFiles="true" 
           SkipUnchangedFiles="false" /> 
        </Target> 
    
        <Target Name="CustomTarget" BeforeTargets="BeforeBuild"> 
         <Message Text="Transforming: Web.$(Configuration).config" Importance="high" /> 
         <TransformXml Source="Web.base.config" 
             Transform="Web.$(Configuration).config" 
             Destination="Web.config" /> 
        </Target> 
    </Project> 
    
  9. Teraz, od tego momentu, to nigdy, nigdy edycji Web.config zostanie on nadpisany za każdym razem aplikacja kompiluje. Edytujesz tylko "Web.base.config".

  10. Teraz, pozwólmy, aby Projekt wyglądał tak, jak był. Ponownie kliknij projekt prawym przyciskiem myszy i "Rozładuj". Teraz kliknij ponownie prawym przyciskiem myszy i "Edytuj". Teraz wróć i anuluj komentarze do wszystkich elementów, które skomentowaliśmy w kroku 3. Powinieneś także dodać element "DependentOn" w elemencie "Web.base.config", aby pojawił się również pod "Web.config". Zamknij i zapisz, a następnie ponownie załaduj projekt. Powinieneś zauważyć, że wszystkie konfiguracje znajdują się ponownie pod "Web.config".

  11. W tym momencie możesz dodać dowolną liczbę konfiguracji do swojego projektu/rozwiązania, jak chcesz. Na przykład dodałem konfigurację kompilacji o nazwie "Tim (debugowanie)", ale konfiguracja projektu nosi nazwę "Tim.Debug". Kiedy klikam prawym przyciskiem myszy "Web.config" i wybieram "Add Config Transforms", dodaje się teraz mój plik "Web.Tim.Debug.config". Możesz także dodać konfiguracje dla środowiska lub zespołu.


Warto zauważyć, że poszczególne pliki konfiguracyjne są tylko podzbiór o „Web.base.config” i będą one „przekształcenie” podczas każdego procesu kompilacji. Aby zmienić, która transformacja ma zostać zbudowana podczas debugowania, po prostu przejdź do początku rozwiązania i wybierz odpowiednią konfigurację kompilacji. Tak długo, jak masz plik web.config dla tej konfiguracji konfiguracji, zmieni się. Jeśli nie, zamiast tego otrzymasz "Web.base.config".

UWAGA: Powinno to również działać ze standardowymi aplikacjami Windows/WPF, a także z aplikacją "app.config".

+0

To jest absolutnie niesamowite. Wprowadziłem jedną zmianę, aby nie popełnił błędu, gdyby nie było Web.Configuration.config: ' '. I powinniśmy zauważyć, że każdy programista musi budować we własnej "konfiguracji". Szkoda, że ​​nie było niezawodnego sposobu na włączenie "machine.config" do projektu bez VS, który ciągle próbuje to sprawdzić. –

+0

+1 Tak właśnie myślałem o sobie. Więc szukałem i dostałem to tutaj. Świetna robota Tim. –

+0

** Jeszcze jeden Q **: skoro grałeś z tymi obiektami MS build, prawdopodobnie wiesz, co dodać, aby przekształcić niektóre inne pliki konfiguracyjne? Konfiguracja internetowa pozwala zdefiniować appSettings w innym pliku konfiguracyjnym, tj. * AppSettings.config *. W jaki sposób możemy dodać tę wartość do transformacji (zależnie od tego, aby transformacje były wyświetlane hierarchicznie, ale nie stanowi to problemu). –

Powiązane problemy