私はこれをできるだけ明確に説明しようとします
MSBuildマルチターゲティングがどのように機能するかを完全に理解したいと思います。
私はマイクロソフトからいくつかの記事を読んだことがあり、基本は理解していると思いますが、何かを見逃していないことを確認したいと思います。
Microsoftによると:
Visual Studioを使用すると、アプリケーションをコンパイルして、.NETFrameworkのいくつかのバージョンのいずれかで実行できます。たとえば、.NET Frameworkバージョン2.0で実行するようにアプリケーションをコンパイルし、.NETFrameworkバージョン4で実行するように同じアプリケーションをコンパイルできます。複数のフレームワークにコンパイルする機能はマルチターゲティングと呼ばれます。
Visual Studioは、開発用コンピューターにインストールされている.NETFrameworkの最新バージョンで実行されます。
http://msdn.microsoft.com/en-us/library/ee395432.aspx
つまり、Visual Studioは常にインストールされている最新のフレームワークからMSBuildを呼び出すということですか?Visual Studio 2010がインストールされていると仮定すると、常に次のように呼び出されます。.NetFrameworkのバージョンをターゲットにしたプロジェクト%WINDIR%\Microsoft.NET\Framework\v4.0.30319\MsBuild.exe
をビルドする場合???
ToolsVersion
はいの場合、古い.Net Framewrokバージョンをターゲットにする機能は、および/またはTargetFrameworkVersion
プロパティに基づいていますか?
はいの場合は、継続的インテグレーションボックスに最新のフレームワーク(および古いフレームワークもインストールしますが、Visual Studioはインストールしません)をインストールするだけで、常に次のソリューションを構築するように指示できます。引数%WINDIR%\Microsoft.NET\Framework\v4.0.30319\MsBuild.exe
を指定するだけToolsVersion
です(必要な場合は、各プロジェクトには独自のターゲットバージョンを指定できるためTargetFrameworkVersion
、古い.NetFrameworkバージョンをターゲットにすることになります)。
これに続いて、私のCIボックスはVisualStudioのように構築されると思います。私は正しいですか?私は何が欠けていますか?完全に確信する方法はありますか?
簡単なテストを行いましたが、うまくいくと思います:pプロジェクトは、指定された.Net Frameworkに従って構築されていますが、前述のように、何かが不足していないことを確認したいと思います。
何かご意見は?
ところで:
これを実行したい単純な理由は、プロジェクト間で再利用可能なカスタムMSBuildスクリプトがいくつかあるためですが、これらのスクリプトの機能の一部にはMSBuild 4.0が必要であり、フレームワーク4.0の上にいくつかのMSBuildタスクが構築されているためです。たとえば、Framework 2.0を対象とするソリューションがあり、次を使用してビルド%WINDIR%\Microsoft.NET\Framework\v2.0.50727\MsBuild.exe
しようとしています。カスタムターゲットを読み込もうとするとMSBuildエラーが発生します。