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
ファイルなど、プロジェクトに関連するすべてのファイルとフォルダーが表示されます。
Visual Studio for Mac で新しいタブに .csproj
を表示するには、プロジェクト名を右クリックし、[ツール] > [ファイルの編集] の順に選択します。
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 についてさらに詳しく学習できます。