2009-09-23 21 views
20

Właściwie ja się wokół problemu dostaję coraz częściej do jak lubię:Porównaj konfiguracje w programie Visual Studio?

Rozważmy następujący: Po prostu popełnił nowego rozwiązania/projektu i rozpocząć tworzenie/dodanie wszystkie rzeczy trzeba. W tym czasie zawsze jesteś w trakcie konfiguracji debugowania. Wprowadzasz zmiany do swojej konfiguracji (w projektach C++, szczególnie kompilator, ustawienia linkera) i na koniec dnia chcesz tylko zamienić na tryb wydania, aby stworzyć ostateczną kompilację i co się dzieje? Masz wiele komunikatów o błędach dotyczących brakujących definicji, połączonych bibliotek, definicji preprocesora, prekompilowanych nagłówków itp.).

A teraz? Otworzysz Właściwości projektu, wybierasz każdy element w widoku drzewa i przełączasz się i powracasz za pomocą pola listy konfiguracji w lewym górnym rogu.

Z uwagi na to, że obie konfiguracje są zapisane w jednym pliku, nie można również użyć prostego narzędzia Diff-Tool lub skopiować i wkleić obie części z pliku projektu do dwóch różnych plików, porównać je i scalić wszystko z powrotem w pliku projektu.

Czy nie ma lepszego rozwiązania do porównywania różnych konfiguracji w ramach jednego projektu?

+4

Podczas szukania rozwiązania po myśli, to jest to, co robię, aby uniknąć tego problemu w pierwszej kolejności: Ilekroć zmieniam cokolwiek w konfiguracji, wybieram _Wszystkie konfiguracje_. Jest to możliwe w przypadku większości dostępnych ustawień, szczególnie w przypadku ustawień Linker i Include. – OregonGhost

+2

Masz rację. Będę już używał * Wszystkie konfiguracje *, ale czasami po prostu przegapiłem i po pewnym czasie po prostu zdałem sobie sprawę, że nie jestem w stanie uzyskać wszystkich konfiguracji pomyślnie zbudowanych, a następnie cholerna praca ręcznego porównywania konfiguracji zaczyna się ... – Oliver

+1

I "Jestem tak sfrustrowany tym problemem, że myślę o napisaniu narzędzia do parsowania pliku projektu i porównywania różnych wartości pomiędzy różnymi konfiguracjami. Czy kiedykolwiek znalazłeś rozwiązanie (więc nie muszę pisać własnego narzędzia)? – aldo

Odpowiedz

1

Nie mam idealnego rozwiązania do porównania w pliku projektu ... ale za to, co jest warte, może się okazać pomocne porównanie bieżącego pliku projektu z kopią w kontroli źródła. A następnie, gdy widzisz zmienioną wartość w jednej sekcji, możesz szybko sprawdzić, czy ta wartość została również zmieniona w drugiej sekcji.

Ale twoje pytanie określało nowy projekt ... więc zakładam, że nie jest jeszcze kontrolowany przez źródło.

Oto kolejna opcja: Skopiuj plik projektu na inną nazwę, a następnie porównaj dwie kopie. Tak, będą takie same ... ale jeśli korzystasz z dobrego narzędzia, takiego jak Beyond Compare 2, które pozwala ręcznie wyrównywać sekcje, możesz kliknąć prawym przyciskiem myszy w pierwszym wierszu sekcji debugowania w lewym oknie i wybrać Wyrównaj Ręcznie, a następnie kliknij prawym przyciskiem myszy w pierwszym wierszu sekcji wydania w prawym oknie i wybierz Wyrównaj ręcznie. Voila ... są twoje zmiany. :)

+0

To są całkiem dobre opcje i już staram się robić te rzeczy mniej więcej w ten sposób, ale one czuć się nieswojo i brzydko. Szczególnie użycie narzędzi różnicowych (nawet wbudowana wersja VS do kontroli źródła) pokazuje, że narzędzia już tam są. Wszystko, czego potrzebujemy, to mechanizm, który prawidłowo dzieli plik xml, pokazując dwie wersje (np. Debugowanie, wydanie) obok siebie i że nie musisz tego robić ręcznie. – Oliver

1

Istnieje program o nazwie BeyondCompare3, który jest bardzo tani. Rzadko popieram produkty, ale powinienem wykonać to za Ciebie. Użyj opcji "Porównaj zaznaczenie ze schowkiem".

+0

Jak już powiedziałem, staram się realizować te zadania za pomocą zewnętrznego narzędzia do porównywania. Ale po prostu niewygodne jest otwieranie plików xml i ręczne wyrównywanie dwóch sekcji, tak aby narzędzie porównania porównywało te dwie sekcje. – Oliver

+0

Czy używasz tego konkretnego narzędzia? Istnieje wiele odmian narzędzi do porównywania. W przypadku BeyondCompare 3 wystarczy wyróżnić obszary do porównania. To wciąż wymaga wysiłku, ale nie tyle, ile wyrównanie. Jeśli szukasz automatycznej odpowiedzi "napraw moją konfigurację", będziesz musiał napisać to sam. Jest to wystarczająco mały problem, że nie będzie wielu ludzi, którzy piszą narzędzie, za darmo lub w inny sposób, aby rozwiązać ten problem. –

3

Oto, co warto teraz zrobić, aby poradzić sobie z problemem zmiany jednej konfiguracji i zapomnienia o zmianie drugiej. Ten proces, którego używam, ma jednak dwa zastrzeżenia: 1) działa z VS2010 i nowszymi; oraz 2) nauczyłem się całkowicie unikać tego problemu.

Po pierwsze, I NIGDY wprowadź zmiany na stronie właściwości projektu! Mają tendencję do używania warunków kompilacji, które powodują ten problem w pierwszej kolejności. Zamiast tego zawsze mam otwarty "Menedżer właściwości" obok mojego "Eksploratora rozwiązań".

Po drugie, mam kilka „pre-defined” arkusze nieruchomości w podkatalogu o nazwie common.properties że zawierają od, na przykład:

  • my_macros.props - wspólne definicje makr specyficzne dla mojego struktura katalogowa rozwiązania (czytaj: struktura). Na przykład mam definicję o nazwie MY_COMMON_OUTPUT_DIRECTORY, która jest równa $ (SolutionDir) bin \ $ (Konfiguracja) \ $ (ProjectName).

  • my_dox_settings.props - Ustawienia właściwe dla projektów doxygen.Tak, tworzę osobny projekt przy pomocy doxygena, aby stworzyć moją dokumentację.

  • my_test_settings.props - Ustawienia specyficzne dla mojej struktury testowania jednostek. Ponownie, oddzielny projekt dla testów jednostkowych. Dodaje zdarzenie typu post-build, które uruchamia skompilowany plik wykonywalny.

  • my_app_settings.props - Domyślne ustawienia dla mojej aplikacji framework. Na przykład ustawia "katalog wyjściowy" na wspomniany wcześniej MY_COMMON_OUTPUT_DIRECTORY.

  • my_app_settings_use_pch.props - Dodatkowe zmiany w mojej aplikacji, która używa prekompilowanych nagłówków. Dodaje po prostu przełącznik kompilatora/DI_WANT_MY_PCH.

  • include_boost_files.props - Ustawienia do dodawania boost-bibliotek do moich projektów.

  • include_ogre_files.props - Ustawienia do dodawania galerii ogrów do moich projektów.
  • include_sdl_file.props - Ustawienie do dodawania bibliotek sdl do moich projektów.

  • powinno być coraz pomysł ...

Następnie utworzyć nowy arkusz puste nieruchomości i dodać go jako dobrze. Zazwyczaj nazywam to $ (ProjectName) .props [UWAGA: pamiętaj, aby samemu powiększyć makro], a następnie dodaj je za pomocą menedżera właściwości jako ostatniego elementu.

Teraz, kiedy muszę wprowadzić zmiany w projekcie, po prostu przełączam się do menedżera właściwości i zmieniam odpowiedni arkusz właściwości. Należy pamiętać, że wpływa to na wszystkie projekty korzystające z arkusza właściwości. Jeśli chcesz tylko wpłynąć na bieżący projekt, zmodyfikuj arkusz właściwości $ (ProjectName). Dopóki nie stworzysz warunków (do których nie wejdę), jedna zmiana wpływa na wiele konfiguracji (i projektów).

Sprawdzam nawet mój katalog common.properties w kontrolerze źródłowym.

Mam nadzieję, że to pomaga,

+0

Brzmi jak całkiem niezły pomysł. Nigdy nie pracowałem z własnymi stronami właściwości (bo o nich nie wiedziałem). Nakrętka brzmi jak jej warto przyjrzeć się głębiej. – Oliver

+0

Więc w jaki sposób to rozwiązanie okazało się dla Ciebie? – jump

2

Nie jestem pewien, kiedy wprowadzono go, ale w VS2015 przy-najmniej, można wybrać „wielu konfiguracjach ...” na liście rozwijanej konfiguracji na nieruchomości Ekran stron. Następnie możesz wybrać "Wszystkie opcje" z różnych sekcji i zobaczyć, które parametry różnią się (te, które różnią się). Nie pokazuje rzeczywistych wartości - nadal musisz się do tego przełączać - ale przynajmniej możesz szybko zauważyć różnice.

Powiązane problemy