Dziedziczenie właściwości w projektach programu Visual Studio

Natywny system projektu programu Visual Studio jest oparty na programie MSBuild. Program MSBuild definiuje formaty i reguły dotyczące tworzenia projektów dowolnego rodzaju. Zarządza on większością złożoności kompilowania dla wielu konfiguracji i platform. Warto zrozumieć, jak to działa. Jest to szczególnie ważne, jeśli chcesz zdefiniować konfiguracje niestandardowe. Możesz też utworzyć zestawy właściwości wielokrotnego użytku, które można udostępniać i importować do wielu projektów.

Plik vcxproj, pliki props i pliki targets

Właściwości projektu są przechowywane w kilku plikach. Niektóre są przechowywane bezpośrednio w .vcxproj pliku projektu. Inne pochodzą z innych .targets plików lub .props importowanych przez plik projektu i dostarczających wartości domyślne. Pliki projektu programu Visual Studio 2015 znajdziesz w folderze specyficznym dla ustawień regionalnych w katalogu %ProgramFiles(x86)%\MSBuild\Microsoft.Cpp\v4.0\v140podstawowym .

Właściwości projektu są przechowywane w kilku plikach. Niektóre są przechowywane bezpośrednio w .vcxproj pliku projektu. Inne pochodzą z innych .targets plików lub .props importowanych przez plik projektu i dostarczających wartości domyślne. Pliki projektu programu Visual Studio 2017 znajdują się w folderze specyficznym dla ustawień regionalnych w katalogu %VSINSTALLDIR%Common7\IDE\VC\VCTargets\podstawowym .

Właściwości projektu są przechowywane w kilku plikach. Niektóre są przechowywane bezpośrednio w .vcxproj pliku projektu. Inne pochodzą z innych .targets plików lub .props importowanych przez plik projektu i dostarczających wartości domyślne. Pliki projektu programu Visual Studio znajdują się w folderze specyficznym dla ustawień regionalnych w katalogu podstawowym . %VSINSTALLDIR%\MSBuild\Microsoft\VC\<version> Element <version> jest specyficzny dla wersji programu Visual Studio. v160 Jest przeznaczony dla programu Visual Studio 2019.

Właściwości są również przechowywane w dowolnych plikach niestandardowych .props , które można dodać do własnego projektu. Zdecydowanie zalecamy ręczne edytowanie tych plików. Zamiast tego użyj stron właściwości w środowisku IDE, aby zmodyfikować wszystkie właściwości, zwłaszcza te, które uczestniczą w dziedziczeniu, chyba że masz głębokie zrozumienie programu MSBuild i .vcxproj plików.

Jak pokazano wcześniej, ta sama właściwość dla tej samej konfiguracji może mieć przypisaną inną wartość w tych różnych plikach. Podczas tworzenia projektu aparat MSBuild ocenia plik projektu i wszystkie zaimportowane pliki w dobrze zdefiniowanej kolejności opisanej później. Podczas oceniania każdego pliku wszystkie wartości właściwości zdefiniowane w tym pliku zostaną zastąpione istniejącymi wartościami. Wszystkie wartości, które nie zostały określone, są dziedziczone z plików, które zostały ocenione wcześniej. Podczas ustawiania właściwości ze stronami właściwości należy również zwrócić uwagę na to, gdzie ją ustawisz. Jeśli właściwość zostanie ustawiona na "X" w .props pliku, ale właściwość jest ustawiona na "Y" w pliku projektu, projekt zostanie skompilować z właściwością ustawioną na "Y". Jeśli ta sama właściwość ma wartość "Z" w elemencie projektu, takim jak .cpp plik, aparat MSBuild użyje wartości "Z".

Oto podstawowe drzewo dziedziczenia:

  1. Ustawienia domyślne z zestawu narzędzi CPP programu MSBuild ( Microsoft.Cpp.Default.props plik w katalogu podstawowym, który jest importowany przez .vcxproj plik).

  2. Arkusze właściwości

  3. .vcxproj Plik. (Ten plik może zastąpić ustawienia domyślne i ustawienia arkusza właściwości).

  4. Metadane elementów

Napiwek

Na stronie właściwości właściwość pogrubiona jest definiowana w bieżącym kontekście. Właściwość czcionką normalną jest dziedziczona.

Wyświetlanie rozwiniętego pliku projektu ze wszystkimi zaimportowanymi wartościami

Czasami warto wyświetlić plik rozszerzony w celu stwierdzenia, jak jest dziedziczona dana wartość właściwości. Aby wyświetlić rozszerzoną wersję, wprowadź następujące polecenie w wierszu polecenia Visual Studio. (Zastąp nazwy plików zastępczych nazwami, których chcesz używać.)

msbuild /pp:temp.txt myapp.vcxproj

Rozszerzone pliki projektów mogą być duże i trudne do zrozumienia, chyba że znasz program MSBuild. Oto podstawowa struktura pliku projektu:

  1. Podstawowe właściwości projektu, które nie są widoczne w środowisku IDE.

  2. Import elementu Microsoft.cpp.default.props, który definiuje niektóre podstawowe właściwości niezależne od zestawu narzędzi.

  3. Właściwości konfiguracji globalnej (uwidocznione jako właściwości domyślne PlatformToolset i Project na stronie Ogólne konfiguracji. Te właściwości określają, które zestaw narzędzi i wewnętrzne arkusze właściwości są importowane w Microsoft.cpp.props następnym kroku.

  4. Import elementu Microsoft.cpp.props, który ustawia większość domyślnych ustawień projektu.

  5. Importowanie wszystkich arkuszy właściwości, w tym .user plików. Te arkusze właściwości mogą zastąpić wszystko, z wyjątkiem właściwości domyślnych PlatformToolset i Project .

  6. Pozostałe właściwości konfiguracji projektu. Te wartości mogą zastąpić to, co ustawiono w arkuszach właściwości.

  7. Elementy (pliki) wraz z ich metadanymi. Te elementy są zawsze ostatnim słowem w regułach oceny programu MSBuild, nawet jeśli wystąpią przed innymi właściwościami i importami.

Aby uzyskać więcej informacji, zobacz Właściwości programu MSBuild.

Konfiguracje kompilacji

Konfiguracja to tylko dowolna grupa właściwości, które mają nazwę. Program Visual Studio udostępnia konfiguracje debugowania i wydania. Każda z nich odpowiednio ustawia różne właściwości kompilacji debugowania lub kompilacji wydania. Za pomocą programu Configuration Manager można zdefiniować konfiguracje niestandardowe. Są one wygodnym sposobem grupowania właściwości dla konkretnej odmiany kompilacji.

Aby lepiej zrozumieć konfiguracje kompilacji, otwórz Menedżera właściwości. Możesz go otworzyć, wybierając pozycję Wyświetl > Menedżera właściwości lub Wyświetl > inny Menedżer właściwości systemu Windows>, w zależności od ustawień. Menedżer właściwości ma węzły dla każdej konfiguracji i pary platformy w projekcie. W każdym z tych węzłów znajdują się węzły arkuszy właściwości (.props plików), które ustawiają określone właściwości dla tej konfiguracji.

Screenshot of the Property Manager window.

Na przykład możesz przejść do okienka Ogólne na stronach właściwości. Zmień właściwość Zestaw znaków na "Nie ustaw" zamiast "Użyj Unicode", a następnie kliknij przycisk OK. Menedżer właściwości nie pokazuje teraz arkusza właściwości pomocy technicznej Unicode. Jest on usuwany dla bieżącej konfiguracji, ale nadal istnieje w przypadku innych konfiguracji.

Aby uzyskać więcej informacji na temat Menedżera właściwości i arkuszy właściwości, zobacz Udostępnianie lub ponowne używanie ustawień projektu programu Visual Studio C++.

Napiwek

Plik .user jest starszą funkcją. Zalecamy usunięcie jej, aby zachować prawidłowe pogrupowanie właściwości zgodnie z konfiguracją i platformą.