Visual Studio 2008 MSBuild 3.5 ToolsVersion の話し

MSDN 標準ツールセット構成とカスタム ツールセット構成 をあまり読まずに、MsBuildとVS2008で生成されたDLLのサイズが異なってしまいます。 - Insider .NET会議室 に回答してしまった。ちょっと反省。
MSDN 標準ツールセット構成とカスタム ツールセット構成より引用

ToolsVersion 値は、プロジェクト ファイルの Project タグに属性として指定され、Visual Studio で生成されたプロジェクトが使用するツールセットを決定します。ToolsVersion は、ツールセットの "名前" と考えることができます。プロジェクトに ToolsVersion が指定されていない場合は、既定の ToolsVersion が使用されます。MSBuild 3.5 では、既定の ToolsVersion 値が 2.0 に設定されます。この既定値の場合、明示的な ToolsVersion を指定せずにビルドしたプロジェクトは Visual Studio 2005 に含まれていた 2.0 ツールセットを使用します。Visual Studio 2008 プロジェクトは、すべてのプロジェクトを自動的に ToolsVersion 値 3.5 で生成します。この場合、新しいツールセットを使用するため、.NET Framework のすべてのバージョンを対象とすることができます。

これの解釈を間違えてた気がする。
Visual Studio 2008 から ビルド(MSBuild を実行)した時は、ToolsVersion の既定値が 3.5 で、MSBuild 単体で実行した時は、ToolsVersion の既定値が 2.0 て勘違いしてしまった。


そうじゃなくて、MSBuild は、常に(Visual Studio 2008 から実行されても) ToolsVersion の既定値が 2.0で、ただ、プロジェクトファイル(.〜proj)の Project タグに ToolsVersion が指定されている場合は、指定されている ToolsVersion で動作し、指定されていない場合は既定値 で動作します。
で、Visual Studio 2008 で作成したプロジェクトは、Project タグで ToolsVersion に 3.5 を指定しています。
だから、Visual Stuido 2008 で作成したプロジェクトは、MSBuild でビルドしても ToolsVersion は 3.5 で動作する。って事だよね?


ただ、質問者が MSBuild のスイッチで明示的に ToolsVersion を指定したら、動作が変わったと言われているので実際どうなんだろう?
アセンブリのサイズが変わるって解んないな〜。Target ファイルをカスタムしてるとか、カスタム Target ファイルを読み込ましてるとかかな?
でも、それなら Visual Studio からのビルドと MSBuild からのビルドでも同じファイルが読み込まれるはずだし…、う〜んワカんね。