参考にした情報:
- チュートリアル: MSBuild プロジェクト ファイルのゼロからの作成
- MSBuild リファレンス
- F#インストールディレクトリ下の
Microsoft.FSharp.Targets
ファイル - .NET Frameworkインストールディレクトリ下の
Microsoft.Common.targets
ファイル
検証環境:
- F# 2.0 Compiler build 4.0.40219.1
- Windows7 Starter SP1
- .NET Framework v4.0.30319.42000(?) v4.6.1087.0(?)
分かったこと1:
Microsoft.FSharp.Targets
は
- インストールディレクトリの
%ProgramFiles%\Microfsoft F#\v4.0\
- MSBuildディレクトリの
%ProgramFiles%\MSBuild\FSharp\1.0\
の2箇所に存在した
MSBuild.exe
とMicrosoft.Common.targets
は%WINDIR%\Microsoft.Net\Framework\v4.0.30319\
に存在した
MSBuildの予約済みプロパティや共通プロパティや共通項目はMSBuildや.NET Frameworkのバージョンによって異なる v4.0はBuild Engineバージョンを4.5とか4.6に上げたやつだと多いけど4.0のままだと3.5と大差ない
分かったこと2:
簡単な単一アプリの生成だけならMSBuildプロジェクトの共通項目であるCompile
にソースファイル指定するだけでおk。
アプリのファイル名はMSBuildの共通プロパティのAssemblyName
に拡張子除いたファイル名を指定しておけばおk。
Project
のDefaultTargets
の指定はいらない(Buildターゲットになる?)けど
ToolVersion
は指定しないとインストールされている一番古いToolVersion
でコンパイルされる(?)。
ただし、設定値を反映させるためにはMicrosoft.FSharp.Targets
のImport
はprojファイルの最後で指定する必要がある。
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<AssemblyName>myapp</AssemblyName>
</PropertyGroup>
<ItemGroup>
<Compile Include="mysourcecode1.fs" />
<Compile Include="mysourcecode2.fs" />
</ItemGroup>
<Import Project="C:\Program Files\MSBuild\FSharp\1.0\Microsoft.FSharp.Targets" />
</Project>
この場合、オブジェクトファイルなどの一時ファイルはobj\Debug
ディレクトリに、最終生成物はbin\Debug
に置かれる。
MSBuildの共通プロパティのConfiguration
でRelease
を設定するとDebugビルドではなくReleaseビルドになる。
Microsoft.FSharp.Targets
はMicrosoft.Common.targets
も読み込むためそれらに定義されている共通ターゲット(Runなど)を呼び出すことができる。