Visual Studio の統合 (MSBuild)Visual Studio Integration (MSBuild)

Visual Studio は、マネージ プロジェクトの読み込みとビルドを行う MSBuildMSBuild をホストしています。Visual Studio hosts MSBuildMSBuild to load and build managed projects. MSBuildMSBuild はプロジェクトに対応しているため、そのプロジェクトが他のツールで作成されていたり、ビルド処理がカスタマイズされていたりしても、 MSBuildMSBuild 形式のほとんどすべてのプロジェクトを Visual StudioVisual Studioで問題なく使用できます。Because MSBuildMSBuild is responsible for the project, almost any project in the MSBuildMSBuild format can be successfully used in Visual StudioVisual Studio, even if the project was authored by a different tool and has a customized build process.

このトピックでは、 Visual StudioVisual Studioに読み込んでビルドするプロジェクトおよび .targets ファイルをカスタマイズする際に考慮が必要な、 MSBuildMSBuild による Visual StudioVisual Studioのホストに固有な事項について説明します。This topic describes specific aspects of Visual StudioVisual Studio's MSBuildMSBuild hosting that should be considered when customizing projects and .targets files that you wish to load and build in Visual StudioVisual Studio. これらの事項は、IntelliSense やデバッグなどの Visual StudioVisual Studio の機能をカスタム プロジェクトに対して有効にするうえで役立ちます。These will help you make sure Visual StudioVisual Studio features like IntelliSense and debugging work for your custom project.

C++ プロジェクトの詳細については、「 Project Files」を参照してください。For information about C++ projects, see Project Files.

プロジェクト ファイルの拡張子Project File Name Extensions

MSBuild.exe は、.*proj のパターンに一致するすべてのプロジェクト ファイル拡張子を認識します。MSBuild.exe recognizes any project file name extension matching the pattern .*proj. ただし、 Visual StudioVisual Studio は、プロジェクトを読み込む言語固有のプロジェクト システムを決定する、これらのプロジェクト ファイル拡張子のサブセットしか認識しません。However, Visual StudioVisual Studio only recognizes a subset of these project file name extensions, which determine the language-specific project system that will load the project. Visual StudioVisual Studio には、言語に依存しない MSBuildMSBuild ベースのプロジェクト システムが備わっていないためです。 does not have a language-neutral MSBuildMSBuild based project system.

たとえば、 Visual C#Visual C# のプロジェクト システムは .csproj ファイルを読み込みますが、 Visual StudioVisual Studio では .xxproj ファイルを読み込むことができません。For example, the Visual C#Visual C# project system loads .csproj files, but Visual StudioVisual Studio is not able to load a .xxproj file. 任意の言語のソース ファイル用のプロジェクト ファイルには、 Visual BasicVisual Basic に読み込む Visual C#Visual C# または Visual StudioVisual Studioプロジェクト ファイルと同じ拡張子を使用する必要があります。A project file for source files in an arbitrary language must use the same extension as Visual BasicVisual Basic or Visual C#Visual C# project files to be loaded in Visual StudioVisual Studio.

既知のターゲット名Well-Known Target Names

[ビルド] Visual StudioVisual Studio をクリックすると、プロジェクトの既定のターゲットが実行されます。Clicking the Build command in Visual StudioVisual Studio will execute the default target in the project. このターゲットも Buildという名前になっていることがよくあります。Often, this target is also named Build. [リビルド] または [消去] を選択すると、プロジェクト内の同じ名前のターゲットが実行されます。Choosing the Rebuild or Clean command will attempt to execute a target of the same name in the project. [発行] をクリックすると、プロジェクト内の PublishOnly という名前のターゲットが実行されます。Clicking Publish will execute a target named PublishOnly in the project.

構成とプラットフォームConfigurations and Platforms

MSBuildMSBuild プロジェクトの構成は、 PropertyGroup 属性を含む Condition 要素内にグループ化されているプロパティによって表されます。Configurations are represented in MSBuildMSBuild projects by properties grouped in a PropertyGroup element that contains a Condition attribute. Visual StudioVisual Studio は、表示するプロジェクト構成およびプラットフォームのリストを作成するために、これらの条件を確認します。 looks at these conditions in order to create a list of project configurations and platforms to display. このリストを正常に抽出するには、条件の形式が次のようになっている必要があります。To successfully extract this list, the conditions must have a format similar to the following:

Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "  
Condition=" '$(Configuration)' == 'Release' "   
Condition=" '$(Something)|$(Configuration)|$(SomethingElse)' == 'xxx|Debug|yyy' "  

Visual StudioVisual Studio はこの目的のために、 PropertyGroupItemGroupImport、プロパティ、および項目要素の条件を確認します。looks at the conditions on PropertyGroup, ItemGroup, Import, property, and item elements for this purpose.

その他のビルド アクションAdditional Build Actions

Visual StudioVisual Studio では、[ファイルのプロパティ] ウィンドウの [ビルド アクション] プロパティを使って、プロジェクト内のファイルの項目の種類名を変更できます。allows you to change the item type name of a file in a project with the Build Action property of the File Properties window. CompileEmbeddedResourceContent、および None の各項目の種類名は、プロジェクト内に既に存在する他の項目の種類名と共に、常にこのメニューに表示されます。Compile, EmbeddedResource, Content, and None item type names are always listed in this menu, along with any other item type names already in your project. このメニューにカスタムの項目の種類名すべてが常に表示されるようにするには、 AvailableItemNameという項目の種類に名前を追加します。To ensure any custom item type names are always available in this menu, you can add the names to an item type named AvailableItemName. たとえば、プロジェクト ファイルに次の内容を追加すると、このファイルをインポートするすべてのプロジェクトの当該メニューに、カスタム型 JScript が追加されます。For example, adding the following to your project file will add the custom type JScript to this menu for all projects that import it:

    <AvailableItemName Include="JScript"/>  


一部の項目の種類名は Visual StudioVisual Studio 特有のものですが、このドロップダウン リストには表示されません。Some item type names are special to Visual StudioVisual Studio but not listed in this dropdown.

インプロセス コンパイラIn-Process Compilers

Visual StudioVisual Studio では、可能な限り Visual BasicVisual Basic コンパイラのインプロセス バージョンを使用して、パフォーマンスの向上を計ります When possible, Visual StudioVisual Studio will attempt to use the in-process version of the Visual BasicVisual Basic compiler for increased performance. (Visual C#Visual C# には該当しません)。これが正しく機能するためには、次の条件が満たされている必要があります。(Not applicable to Visual C#Visual C#.) For this to work correctly, the following conditions must be met:

  • Vbc プロジェクトの場合、プロジェクトのターゲットに Visual BasicVisual Basic という名前のタスクが存在すること。In a target of the project, there must be a task named Vbc for Visual BasicVisual Basic projects.

  • このタスクの UseHostCompilerIfAvailable パラメーターが true に設定されていること。The UseHostCompilerIfAvailable parameter of the task must be set to true.

デザイン時における IntelliSense のサポートDesign-Time IntelliSense

ビルドによって出力アセンブリが生成される前に、 Visual StudioVisual Studio で IntelliSense がサポートされるようにするには、次の条件が満たされている必要があります。To get IntelliSense support in Visual StudioVisual Studio before a build has generated an output assembly, the following conditions must be met:

  • Compileという名前のターゲットが存在すること。There must be a target named Compile.

  • Compile ターゲットまたはその依存関係のいずれかによって、 CscVbcなどの、プロジェクトのコンパイラ タスクが呼び出されること。Either the Compile target or one of its dependencies must call the compiler task for the project, such as Csc or Vbc.

  • Compile ターゲットまたはその依存関係のいずれかによって、IntelliSense に必要なすべてのパラメーター (特にすべての参照) をコンパイラが受け取ること。Either the Compile target or one of its dependencies must cause the compiler to receive all the necessary parameters for IntelliSense, particularly all references.

  • 「インプロセス コンパイラ」のセクションに示した条件が満たされていること。The conditions listed in the "In-Process Compilers" section must be met.

ソリューションの構築Building Solutions

Visual StudioVisual Studio内では、ソリューション ファイルおよびプロジェクトのビルドの順序は Visual StudioVisual Studio 自体によって制御されます。Within Visual StudioVisual Studio, the solution file and project build ordering are controlled by Visual StudioVisual Studio itself. コマンド ラインで msbuild.exe を使用してソリューションをビルドする場合、 MSBuildMSBuild はソリューション ファイルを解析し、プロジェクトのビルドの順序を指定します。When building a solution with msbuild.exe on the command line, MSBuildMSBuild parses the solution file and orders the project builds. どちらの場合も、プロジェクトは依存関係の順序で個別にビルドされ、プロジェクト間参照は走査されません。In both cases the projects are built individually in dependency order, and project to project references are not traversed. 逆に、msbuild.exe を使用して個々のプロジェクトをビルドする場合は、プロジェクト間参照が走査されます。In contrast, when individual projects are built with msbuild.exe, project to project references are traversed.

Visual StudioVisual Studioの内部でビルドする場合は、 $(BuildingInsideVisualStudio) プロパティを trueに設定します。When building inside Visual StudioVisual Studio, the property $(BuildingInsideVisualStudio) is set to true. これをプロジェクトまたは .targets ファイル内で使用することにより、ビルドの動作を変更できます。This can be used in your project or .targets files to cause the build to behave differently.

プロパティと項目の表示Displaying Properties and Items

Visual StudioVisual Studio は、特定のプロパティ名とプロパティ値を認識します。recognizes certain property names and values. たとえば、プロジェクト内で次のプロパティを使用すると、 プロジェクト デザイナー[アプリケーションの種類] ボックスに Windows アプリケーションが表示されます。For example, the following property in a project will cause Windows Application to appear in the Application Type box in the Project Designer.


プロパティ値は、 プロジェクト デザイナー で編集してプロジェクト ファイルに保存できます。The property value can be edited in the Project Designer and saved in the project file. このようなプロパティを編集する際に無効な値を指定した場合、プロジェクトを読み込むと Visual StudioVisual Studio によって警告メッセージが表示され、無効な値が既定値に置き換えられます。If such a property is given an invalid value by hand-editing, Visual StudioVisual Studio will show a warning when the project is loaded and replace the invalid value with a default value.

Visual StudioVisual Studio は一部のプロパティの既定値を認識しています。understands defaults for some properties. これらのプロパティは、既定値以外の値を持つ場合だけプロジェクト ファイルに保存されます。These properties will not be persisted into the project file unless they have non-default values.

恣意的な名前のプロパティは Visual StudioVisual Studioでは表示されません。Properties with arbitrary names are not displayed in Visual StudioVisual Studio. Visual StudioVisual Studioで恣意的な名前のプロパティを変更するには、XML エディターでプロジェクト ファイルを開き、手動で編集する必要があります。To modify arbitrary properties in Visual StudioVisual Studio, you must open the project file in the XML editor and edit them by hand. 詳細については、このトピックで後述する「 Editing Project Files in Visual Studio 」を参照してください。For more information, see the Editing Project Files in Visual Studio section later in this topic.

任意の項目の種類名を使用してプロジェクト内で定義された項目は、既定では、ソリューション エクスプローラーのプロジェクト ノードの下に表示されます。Items defined in the project with arbitrary item type names are by default displayed in the Solution Explorer under their project node. 項目が表示されないようにするには、 Visible メタデータを falseに設定します。To hide an item from display, set the Visible metadata to false. たとえば、次の項目はビルド処理に参加しますが、ソリューション エクスプローラーには表示されません。For example, the following item will participate in the build process but not be displayed in Solution Explorer.

    <IntermediateFile Include="cache.temp">  

プロジェクトにインポートしたファイルで宣言されている項目は、既定では表示されません。Items declared in files imported into the project are not displayed by default. ビルド処理中に作成された項目がソリューション エクスプローラーに表示されることは決してありません。Items created during the build process are never displayed in Solution Explorer.

項目とプロパティの条件Conditions on Items and Properties

ビルド時には、すべての条件が完全に遵守されます。During a build, all conditions are fully respected.

表示するプロパティ値を決定する際、 Visual StudioVisual Studio が、構成に依存すると見なすプロパティは、構成に依存しないと見なすプロパティとは評価方法が異なります。When determining property values to display, properties that Visual StudioVisual Studio considers configuration dependent are evaluated differently than properties it considers configuration independent. 構成に依存すると見なされるプロパティの場合、 Visual StudioVisual StudioConfiguration プロパティと Platform プロパティを適切に設定し、 MSBuildMSBuild に対しプロジェクトを再評価するように指示します。For properties it considers configuration dependent, Visual StudioVisual Studio sets the Configuration and Platform properties appropriately and instructs MSBuildMSBuild to re-evaluate the project. 構成に依存しないと見なされるプロパティの場合、条件の評価方法は不確定です。For properties it considers configuration independent, it is indeterminate how conditions will be evaluated.

項目の条件式は、その項目をソリューション エクスプローラーに表示するかどうかを決めるという目的では常に無視されます。Conditional expressions on items are always ignored for the purposes of deciding whether the item should be displayed in Solution Explorer.


出力アセンブリを見つけて起動し、デバッガーをアタッチするには、 Visual StudioVisual StudioOutputPath、および AssemblyNameの各プロパティが OutputType で正しく定義されている必要があります。In order to find and launch the output assembly and attach the debugger, Visual StudioVisual Studio needs the properties OutputPath, AssemblyName, and OutputType correctly defined. ビルド処理においてコンパイラが .pdb ファイルを生成しない場合、デバッガーはアタッチされません。The debugger will fail to attach if the build process did not cause the compiler to generate a .pdb file.

デザイン時におけるターゲットの実行Design-Time Target Execution

Visual StudioVisual Studio は、プロジェクトを読み込む際に、特定の名前を持つターゲットを実行しようとします。attempts to execute targets with certain names when it loads a project. このようなターゲットとしては、CompileResolveAssemblyReferencesResolveCOMReferencesGetFrameworkPathsCopyRunEnvironmentFiles などがあります。These targets include Compile, ResolveAssemblyReferences, ResolveCOMReferences, GetFrameworkPaths, and CopyRunEnvironmentFiles. Visual StudioVisual Studio はこれらのターゲットを実行することにより、IntelliSense が使用できるようにコンパイラを初期化し、デバッガーを初期化し、さらにソリューション エクスプローラーに表示される参照を解決します。 runs these targets so that the compiler can be initialized to provide IntelliSense, the debugger can be initialized, and references displayed in Solution Explorer can be resolved. これらのターゲットが存在しない場合、プロジェクトは正常に読み込まれてビルドされますが、 Visual StudioVisual Studio のデザイン時環境は完全には機能しません。If these targets are not present, the project will load and build correctly but the design-time experience in Visual StudioVisual Studio will not be fully functional.

Editing Project Files in Visual StudioEditing Project Files in Visual Studio

MSBuildMSBuild プロジェクトを直接編集するには、Visual Studio の XML エディターでプロジェクト ファイルを開きます。To edit an MSBuildMSBuild project directly, you can open the project file in the Visual Studio XML editor.

Visual Studio でプロジェクト ファイルをアンロードして編集するにはTo unload and edit a project file in Visual Studio

  1. ソリューション エクスプローラーで、プロジェクトのショートカット メニューを開き、 [プロジェクトのアンロード]をクリックします。In Solution Explorer, open the shortcut menu for the project, and then choose Unload Project.

    プロジェクトに (利用不可)のマークが付きます。The project is marked (unavailable).

  2. ソリューション エクスプローラーで、利用不可のプロジェクトのショートカット メニューを開き、[<プロジェクト ファイル> の編集] をクリックします。In Solution Explorer, open the shortcut menu for the unavailable project, and then choose Edit <Project File>.

    Visual Studio XML エディターでプロジェクト ファイルが開きます。The project file opens in the Visual Studio XML Editor.

  3. プロジェクト ファイルを編集し、保存して閉じます。Edit, save, and then close the project file.

  4. ソリューション エクスプローラーで、利用不可のプロジェクトのショートカット メニューを開き、 [プロジェクトの再読み込み]をクリックします。In Solution Explorer, open the shortcut menu for the unavailable project, and then choose Reload Project.

IntelliSense と検証IntelliSense and Validation

XML エディターを使用してプロジェクト ファイルを編集する際、MSBuildMSBuild のスキーマ ファイルによって IntelliSense と検証が実行されます。When using the XML editor to edit project files, IntelliSense and validation is driven by the MSBuildMSBuild schema files. これらは、<Visual Studio のインストール ディレクトリ>\Xml\Schemas\1033\MSBuild にあるスキーマ キャッシュにインストールされます。These are installed in the schema cache, which can be found in <Visual Studio installation directory>\Xml\Schemas\1033\MSBuild.

MSBuildMSBuild の中心となる型は Microsoft.Build.Core.xsd で定義され、Visual StudioVisual Studio が使用する共通の型は Microsoft.Build.CommonTypes.xsd で定義されます。The core MSBuildMSBuild types are defined in Microsoft.Build.Core.xsd and common types used by Visual StudioVisual Studio are defined in Microsoft.Build.CommonTypes.xsd. カスタムの項目の種類名、プロパティ、およびタスク用に IntelliSense と検証を使用できるようにスキーマをカスタマイズするには、Microsoft.Build.xsd を編集するか、CommonTypes スキーマまたは Core スキーマを含む独自のスキーマを作成します。To customize the schemas so that you have IntelliSense and validation for custom item type names, properties, and tasks, you can either edit Microsoft.Build.xsd, or create your own schema that includes the CommonTypes or Core schemas. 独自のスキーマを作成する場合は、 [プロパティ] ウィンドウを使用してこのスキーマを見つけるように XML エディターに指示する必要があります。If you create your own schema you will have to direct the XML editor to find it using the Properties window.

読み込んだプロジェクト ファイルの編集Editing Loaded Project Files

Visual StudioVisual Studio は、プロジェクト ファイルの内容やプロジェクト ファイルによってインポートしたファイルの内容をキャッシュします。caches the content of project files and files imported by project files. 読み込んだプロジェクト ファイルを編集すると、プロジェクトを再読み込みして変更を有効にするように求めるメッセージが Visual StudioVisual Studio によって自動的に表示されます。If you edit a loaded project file, Visual StudioVisual Studio will automatically prompt you to reload the project so that the changes take effect. ただし、読み込んだプロジェクトによってインポートされたファイルを編集した場合は、再読み込みを求めるメッセージが表示されないため、手動でプロジェクトのアンロードと再読み込みを行い、変更内容を有効にする必要があります。However if you edit a file imported by a loaded project, there will be no reload prompt and you must unload and reload the project manually to make the changes take effect.

出力グループOutput Groups

Microsoft.Common.targets で定義したいくつかのターゲットの名前は、最後の部分が OutputGroups または OutputGroupDependenciesとなります。Several targets defined in Microsoft.Common.targets have names ending in OutputGroups or OutputGroupDependencies. Visual StudioVisual Studio はこれらのターゲットを呼び出して、特定のプロジェクト出力のリストを取得します。 calls these targets to get specific lists of project outputs. たとえば、SatelliteDllsProjectOutputGroup ターゲットを呼び出すと、ビルドが作成したすべてのサテライト アセンブリのリストが作成されます。For example, the SatelliteDllsProjectOutputGroup target creates a list of all the satellite assemblies a build will create. これらの出力グループは、発行、配置、およびプロジェクト間参照などの機能によって使用されます。These output groups are used by features like publishing, deployment, and project to project references. これらのターゲットを定義していなくても、プロジェクトは Visual StudioVisual Studioに読み込まれてビルドされますが、一部の機能が正常に動作しない場合があります。Projects that do not define them will load and build in Visual StudioVisual Studio, but some features may not work correctly.

参照の解決Reference Resolution

参照の解決とは、プロジェクト ファイルに格納されている参照項目を使用して、実際のアセンブリを検索する処理をいいます。Reference resolution is the process of using the reference items stored in a project file to locate actual assemblies. Visual StudioVisual Studio では、 [プロパティ] ウィンドウに参照ごとに詳細なプロパティを表示するために、参照の解決を実行する必要があります。 must trigger reference resolution in order to show detailed properties for each reference in the Properties window. 次の一覧では、3 種類の参照とその解決方法について説明します。The following list describes the three types of references and how they are resolved.

  • アセンブリ参照Assembly references:

    プロジェクト システムは、 ResolveAssemblyReferencesという既知の名前を持つターゲットを呼び出します。The project system calls a target with the well-known name ResolveAssemblyReferences. このターゲットは、 ReferencePathという項目の種類名を持つ項目を生成します。This target should produce items with the item type name ReferencePath. これらの項目のそれぞれが、参照への完全パスを含む項目規定 (項目の Include 属性の値) を持ちます。Each of these items should have an item specification (the value of the Include attribute of an item) containing the full path to the reference. これらの項目には、以下の新しいメタデータに加え、入力項目のすべてのメタデータも渡されます。The items should have all the metadata from the input items passed through in addition to the following new metadata:

    • アセンブリを出力フォルダーにコピーするかどうかを示すCopyLocal。true または false に設定されます。CopyLocal, indicating whether the assembly should be copied into the output folder, set to true or false.

    • 参照の元の項目規定を格納しているOriginalItemSpecOriginalItemSpec, containing the original item specification of the reference.

    • ResolvedFromディレクトリから解決された場合に "{TargetFrameworkDirectory}" に設定される .NET Framework.NET FrameworkResolvedFrom, set to "{TargetFrameworkDirectory}" if it was resolved from the .NET Framework.NET Framework directory.

  • COM 参照COM references:

    プロジェクト システムは、 ResolveCOMReferencesという既知の名前を持つターゲットを呼び出します。The project system calls a target with the well-known name ResolveCOMReferences. このターゲットは、 ComReferenceWrappersという項目の種類名を持つ項目を生成します。This target should produce items with the item type name ComReferenceWrappers. これらの項目のそれぞれが、COM 参照のための相互運用機能アセンブリへの完全パスを含む項目規定を持ちます。Each of these items should have an item specification containing the full path to the interop assembly for the COM reference. これらの項目には、アセンブリを出力フォルダーにコピーするかどうかを示す CopyLocalという名前の新しいメタデータ (true または false に設定) に加え、入力項目のすべてのメタデータも渡されます。The items should have all the metadata from the input items passed through, in addition to new metadata with the name CopyLocal, indicating whether the assembly should be copied into the output folder, set to true or false

  • ネイティブ参照Native references

    プロジェクト システムは、 ResolveNativeReferencesという既知の名前を持つターゲットを呼び出します。The project system calls a target with the well-known name ResolveNativeReferences. このターゲットは、 NativeReferenceFileという項目の種類名を持つ項目を生成します。This target should produce items with the item type name NativeReferenceFile. これらの項目には、参照の元の項目規定を格納する OriginalItemSpecという名前の新しいメタデータに加え、入力項目のすべてのメタデータも渡されます。The items should have all the metadata from the input items passed through, in addition to a new piece of metadata named OriginalItemSpec, containing the original item specification of the reference.

パフォーマンスに関するヒントPerformance Shortcuts

Visual Studio の UI でデバッグを開始する (F5 キーを押すか、メニュー バーの [デバッグ][デバッグの開始] を選択する) と、パフォーマンスを向上させるために、ビルド処理で高速更新チェックを使用します。If you start debugging in the Visual Studio UI (either by choosing the F5 key or by choosing Debug, Start Debugging on the menu bar), the build process uses a fast update check to improve performance. カスタマイズされたビルドで、順次ビルドするファイルを作成した場合、高速更新チェックでは変更されたファイルが正しく識別されません。In some cases where customized builds create files that get built in turn, the fast update check does not correctly identify the changed files. 徹底した更新プログラムのチェックを必要とするプロジェクトでは、 DISABLEFASTUPTODATECHECK=1環境変数を設定することで高速チェックを無効にできます。Projects that need more thorough update checks can turn off the fast checking by setting the environment variable DISABLEFASTUPTODATECHECK=1. また、プロジェクトまたはプロジェクトでインポートしたファイルで、MSBuild プロパティとしてこれを設定することもできます。Alternatively, projects can set this as an MSBuild property in the project or in a file the project imports.

Visual Studio の通常のビルドでは、高速更新チェックは適用されず、コマンド プロンプトでビルドを開始する場合と同じ方法でプロジェクトがビルドされます。For regular builds in Visual Studio, the fast update check doesn't apply, and the project will build as if you invoked the build at a command prompt.

参照See Also

方法: Visual Studio ビルド処理を拡張する How to: Extend the Visual Studio Build Process
IDE 内からのビルドの開始 Starting a Build from within the IDE
.NET Framework の拡張機能の登録 Registering Extensions of the .NET Framework
MSBuild の概念 MSBuild Concepts
Item 要素 (MSBuild) Item Element (MSBuild)
Property 要素 (MSBuild) Property Element (MSBuild)
Target 要素 (MSBuild) Target Element (MSBuild)
Csc タスク Csc Task
Vbc タスクVbc Task