Visual Studio for Mac で MSBuild システムをカスタマイズする

重要

Visual Studio for Mac は、Microsoft の モダン ライフサイクル ポリシーに従って、2024 年 8 月 31 日に廃止される予定です。 引き続き Visual Studio for Mac を使用できますが、VS Code 用の新しい C# 開発キット拡張機能のプレビュー バージョンなど、Mac 上の開発者向けの他のいくつかのオプションがあります。

サポートタイムラインと代替方法の詳細をご確認ください

MSBuild とも呼ばれる Microsoft Build Engine は、アプリケーションをビルドするためのプラットフォームです。 Mono フレームワークはまた、Microsoft のビルド エンジンを独自に実装しています。それが xbuild です。 ただし、現時点では xbuild は廃止となり、すべてのオペレーティング システムで MSBuild が使用されています。

MSBuild は、Visual Studio for Mac でプロジェクトのビルド システムとして使用されており、ソース ファイルなど、一連の入力を受け取ることで動作し、入力を実行可能ファイルなどの出力に変換し、コンパイラのようなツールを呼び出すことでその出力を実行します。 この出力は、コンパイラのようなツールを呼び出して行われます。

MSBuild ファイル

MSBuild では、XML プロジェクト ファイルを使用します。このファイルによって、プロジェクトの一部である項目 (イメージ リソースなど) とプロジェクトのビルドに必要なプロパティが定義されます。 このプロジェクト ファイルのファイル拡張子は常に proj で終わります。たとえば、C# プロジェクトの場合、.csproj になります。

MSBuild ファイルを表示する

MSBuild ファイルを見つけるには、プロジェクト名を右クリックし、[Finder に表示] を選択します。 次の図のように、この Finder ウィンドウには、.csproj ファイルなど、プロジェクトに関連するすべてのファイルとフォルダーが表示されます。

csproj location in Finder

Visual Studio for Mac で新しいタブに .csproj を表示するには、プロジェクト名を右クリックし、[ツール] > [ファイルの編集] の順に選択します。

opening the csproj in the source editor

MSBuild ファイルの構成

すべての MSBuild ファイルに、次のように必須のルート Project 要素が含まれています。

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
</Project>

通常、プロジェクトによって、.targets ファイルもインポートされます。 このファイルには、さまざまなファイルを処理し、ビルドする方法を説明したルールがたくさん含まれています。 通常、このインポートは proj ファイルの下のほうに表示されます。C# プロジェクトの場合、次の画像のようになります。

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />

ターゲット ファイルは別の MSBuild ファイルです。 このファイルに含まれる MSBuild コードは、複数のプロジェクトで再利用できます。 たとえば、MSBuildBinPath プロパティ (または変数) で表されるディレクトリにある Microsoft.CSharp.targets ファイルには、C# ソース ファイルから C# アセンブリをビルドするためのロジックが含まれています。

項目とプロパティ

MSBuild には、項目プロパティという 2 つの基本データ型があります。詳細については後述します。

Properties

プロパティは、コンパイラ オプションなど、コンパイル設定を格納するための鍵と値のペアです。

プロパティは PropertyGroup を利用して設定されます。また、プロパティには、任意の数の PropertiesGroups を追加できます (PropertiesGroups にはさらに任意の数のプロパティを追加できます)。

たとえば、簡単なコンソール アプリケーションの PropertyGroup は次の XML のようになります。

<PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
    <ProjectGuid>{E248730E-1393-43CC-9183-FFA42F63BE81}</ProjectGuid>
    <OutputType>Exe</OutputType>
    <RootNamespace>refactoring</RootNamespace>
    <AssemblyName>refactoring</AssemblyName>
    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
</PropertyGroup>

プロパティは $() 構文を利用して式から参照できます。 たとえば、$(Foo)Foo プロパティの値として評価されます。 プロパティが設定されていない場合、エラーなしで、空の文字列として評価されます。

アイテム

項目を利用することで、ビルド システムへの入力をリストやセットとして扱うことができます。項目は一般的にファイルを表します。 項目にはそれぞれ、項目の種類仕様が与えられ、任意でメタデータが指定されます。 MSBuild が個々の項目に対して機能することはありません。項目セットと呼ばれる、特定の種類のすべての項目に対して機能します。

項目は、ItemGroup を宣言することで作成されます。 任意の数の項目を含めた ItemGroups をさらに任意の数だけ作成できます。

たとえば、次のコード スニペットでは、iOS の起動画面が作成されます。 起動画面には、ビルドの種類 BundleResource と、イメージのパスの指定が表示されます。

 <ItemGroup>
    <BundleResource Include="Resources\Default-568h%402x.png" />
    <BundleResource Include="Resources\Default%402x.png" />
    <BundleResource Include="Resources\Default.png" />
    <BundleResource Include="Resources\Default-Portrait.png" />
    <BundleResource Include="Resources\Default-Portrait%402x.png" />
    <BundleResource Include="Resources\Default-Landscape%402x.png" />
  </ItemGroup>

項目セットは、@() 構文を利用して式から参照できます。 たとえば、@(BundleResource) は BundleResource 項目セットとして評価されます。すべての BundleResource 項目を意味します。 この種類の項目がない場合、エラーなしで空になります。

MSBuild の学習リソース

次のリソースで MSBuild についてさらに詳しく学習できます。