Visual Studio プロジェクトでのプロパティの継承Property inheritance in Visual Studio projects

Visual Studio プロジェクト システムは MSBuild に基づいており、MSBuild ではファイルの形式と、任意の種類のプロジェクトをビルドするためのルールが定義されています。The Visual Studio project system is based on MSBuild, which defines file formats and rules for building projects of any kind. MSBuild は、複数の構成とプラットフォームに対するビルドの複雑さの大部分を管理しますが、そのしくみについて少し理解しておく必要があります。MSBuild manages much of the complexity of building for multiple configurations and platforms, but you need to understand a little bit about how it works. これは、カスタム構成を定義する場合、または複数のプロジェクトで共有してインポートできる再利用可能なプロパティのセットを作成する場合に、特に重要です。This is especially important if you want to define custom configurations or create reusable sets of properties that you can share and import into multiple projects.

.Vcxproj ファイル、.props ファイル、および .targets ファイルThe .vcxproj file, .props files and .targets files

プロジェクトのプロパティは、プロジェクト ファイル (*.vcxproj) に直接格納されるか、またはプロジェクト ファイルによってインポートされる他の .targets ファイルまたは .props ファイルに格納されて、既定値を提供します。Project properties are stored either directly in the project file (*.vcxproj) or in other .targets or .props files that the project file imports and which supply default values. Visual Studio 2015 では、これらのファイルは \Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140 にあります。For Visual Studio 2015, these files are located in \Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140. Visual Studio 2017 または Visual Studio 2019 では、これらのファイルは \Program Files (x86)\Microsoft Visual Studio\<2017 または 2019>\edition\Common7\IDE\VC\VCTargets にあります。edition はインストールされている Visual Studio のエディションです。For Visual Studio 2017 or Visual Studio 2019, these files are located in \Program Files (x86)\Microsoft Visual Studio\<2017 or 2019>\edition\Common7\IDE\VC\VCTargets, where edition is the Visual Studio edition installed. プロパティは、独自のプロジェクトに追加されているすべてのカスタム .props ファイルにも格納されます。Properties are also stored in any custom .props files that you might add to your own project. これらのファイルは手動で編集しないことを強くお勧めします。MSBuild を非常によく理解しているのでないかぎり、すべてのプロパティの変更には IDE のプロパティ ページを使ってください。継承に関わるプロパティは特にそうです。We highly recommend that you NOT edit those files manually, and instead use the property pages in the IDE to modify all properties, especially those that participate in inheritance, unless you have a very good understanding of MSBuild.

前に示したように、同じ構成の同じプロパティに対し、これらの異なるファイルで異なる値を割り当てることができます。As shown earlier, the same property for the same configuration may be assigned a different value in these different files. プロジェクトをビルドするとき、MSBuild エンジンは、プロジェクト ファイルとすべてのインポートされたファイルを、適切に定義された順序 (後述) で評価します。When you build a project, the MSBuild engine evaluates the project file and all the imported files in a well-defined order (described below). 各ファイルが評価されると、そのファイルで定義されているすべてのプロパティ値が、既存の値をオーバーライドします。As each file is evaluated, any property values defined in that file will override the existing values. 指定されていない値は、前に評価されたファイルから継承されます。Any values that are not specified are inherited from files that were evaluated earlier. そのため、プロパティ ページでプロパティを設定するときは、それを設定する場所にも注意を払うことが重要です。Therefore, when you set a property with property pages, it is also important to pay attention to where you set it. あるプロパティを .props ファイルで "X" に設定しても、プロジェクト ファイルでそのプロパティが "Y" に設定されている場合、プロジェクトは "Y" に設定されたプロパティでビルドされます。If you set a property to "X" in a .props file, but the property is set to "Y" in the project file, then the project will build with the property set to "Y". 同じプロパティが .cpp ファイルなどのプロジェクト項目で "Z" に設定されている場合、MSBuild エンジンは値 "Z" を使います。If the same property is set to "Z" on a project item, such as a .cpp file, then the MSBuild engine will use the "Z" value.

基本的な継承ツリーを次に示します。Here's the basic inheritance tree:

  1. MSBuild CPP ツールセットの既定の設定 (.vcxproj ファイルによってインポートされる ..\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.Cpp.Default.props)Default settings from the MSBuild CPP Toolset (..\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.Cpp.Default.props, which is imported by the .vcxproj file.)

  2. プロパティ シートProperty sheets

  3. .vcxproj ファイル.vcxproj file. (既定値とプロパティ シートの設定をオーバーライド可能)。(Can override the default and property sheet settings.)

  4. 項目メタデータItems metadata

ヒント

プロパティ ページで、bold のプロパティは、現在のコンテキストで定義されます。On a property page, a property in bold is defined in the current context. 通常フォントのプロパティが継承されます。A property in normal font is inherited.

インポートされたすべての値を含む展開されたプロジェクト ファイルを表示するView an expanded project file with all imported values

指定したプロパティ値がどのように継承されているかを特定するために、拡張されたファイルを表示すると便利な場合があります。Sometimes it's useful to view the expanded file to determine how a given property value is inherited. 拡張されたバージョンを表示するには、Visual Studio コマンド プロンプトで次のコマンドを入力しますTo view the expanded version, enter the following command at a Visual Studio command prompt. (プレースホルダー ファイル名を適宜変更してください)。(Change the placeholder file names to the one you want to use.)

msbuild /pp: temp .txt myapp .vcxprojmsbuild /pp: temp .txt myapp .vcxproj

拡張されたプロジェクト ファイルは大きく、MSBuild に詳しくない場合は理解するのが難しい可能性があります。Expanded project files can be large and difficult to understand unless you are familiar with MSBuild. プロジェクト ファイルの基本的な構造を次に示します。Here's the basic structure of a project file:

  1. IDE では公開されていない基本的なプロジェクトのプロパティ。Fundamental project properties, which are not exposed in the IDE.

  2. ツールセットに依存しない一部の基本的なプロパティを定義する Microsoft.cpp.default.props のインポート。Import of Microsoft.cpp.default.props, which defines some basic, toolset-independent properties.

  3. グローバル構成プロパティ ( [Configuration General](構成概要) ページの [PlatformToolset] および [プロジェクト] 既定プロパティとして公開されます)。Global Configuration properties (exposed as PlatformToolset and Project default properties on the Configuration General page. これらのプロパティは、次の手順の Microsoft.cpp.props でインポートされるツールセットおよび組み込みプロパティ シートを決定します。These properties determine which toolset and intrinsic property sheets are imported in Microsoft.cpp.props in the next step.

  4. プロジェクトのほとんどの既定値を設定する Microsoft.cpp.props のインポート。Import of Microsoft.cpp.props, which sets most of the project defaults.

  5. .user を含むすべてのプロパティ シートのインポート。Import of all property sheets, including .user files. これらのプロパティ シートは、 [PlatformToolset] および [プロジェクト] の既定プロパティを除くすべてをオーバーライドできます。These property sheets can override everything except the PlatformToolset and Project default properties.

  6. プロジェクト構成プロパティの残り。The remainder of the project configuration properties. これらの値は、プロパティ シートの設定をオーバーライドできます。These values can override what was set in the property sheets.

  7. 項目 (ファイル) とそのメタデータ。Items (files) together with their metadata. これらは、他のプロパティやインポートの前に発生した場合でも、常に MSBuild 評価規則の最後の単語です。These are always the last word in MSBuild evaluation rules, even if they occur before other properties and imports.

詳細については、「MSBuild プロパティ」を参照してください。For more information, see MSBuild Properties.

ビルドの構成Build configurations

構成は、名前が与えられたプロパティの任意のグループでしかありません。A configuration is just an arbitrary group of properties that are given a name. Visual Studio では、デバッグ構成とリリース構成が提供されており、それぞれにおいてデバッグ ビルドまたはリリース ビルドに適したさまざまなプロパティが設定されています。Visual Studio provides Debug and Release configurations and each sets various properties appropriately for a debug build or release build. 構成マネージャーを使うと、特定のビルド フレーバーに対するプロパティをグループ化するための便利な方法として、カスタム構成を定義できます。You can use the Configuration Manager to define custom configurations as a convenient way to group properties for a specific flavor of build.

ビルド構成をより良く理解するには、設定に応じて [表示] | [プロパティ マネージャー] または [表示] | [その他のウィンドウ] | [プロパティ マネージャー] を選択して、プロパティ マネージャーを開きます。To get a better idea of build configurations, open Property Manager by choosing View | Property Manager or View | Other Windows | Property Manager depending on your settings. プロパティ マネージャーには、プロジェクトの構成とプラットフォームのペアごとにノードがあります。Property Manager has nodes for each configuration/platform pair in the project. これらの各ノードの下には、その構成に固有のプロパティを設定するプロパティ シート (.props ファイル) のノードがあります。Under each of these nodes are nodes for property sheets (.props files) that set some specific properties for that configuration.

プロパティ マネージャーProperty Manager

プロパティ ページの [全般] ウィンドウに移動し、[文字セット] プロパティを [Use Unicode](Unicode を使用) ではなく [設定なし] に設定して、 [OK] をクリックすると、プロパティ マネージャーでは現在の構成に対して [Unicode Support](Unicode のサポート) プロパティ シートが表示されなくなりますが、他の構成のためにプロパティ シートは残っています。If you go to the General pane in the Property Pages and set the Character Set property to "Not Set" instead of "Use Unicode" and click OK, Property Manager will show no Unicode Support property sheet for the current configuration, but it will still be there for other configurations.

プロパティ マネージャーおよびプロパティ シートの詳細については、Visual Studio C++ プロジェクト設定の共有または再利用に関するページを参照してください。For more information about Property Manager and property sheets, see Share or reuse Visual Studio C++ project settings.

ヒント

.user ファイルはレガシ機能であり、構成/プラットフォームに従ってプロパティが正しくグループ化されるように、削除することをお勧めします。The .user file is a legacy feature and we recommend that you delete it in order to keep properties correctly grouped according to configuration/platform.