1

私はこれをできるだけ明確に説明しようとします

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エラーが発生します。

4

1 に答える 1

0

はい、おおむね正しいと思います。4.0 ディレクトリから MSBuild を呼び出すと、以前のバージョンに対して正しい処理が行われます。私が追加したかったのは、2.0、3.0、および 3.5 をターゲットとするプロジェクトを実際にビルドするには、3.5 がボックスに含まれている必要があるということだけでした。

このページ: http://msdn.microsoft.com/en-us/library/bb822049.aspxでは、どのバージョンの Windows にプリインストールされているフレームワークのバージョンが示されています。

于 2012-09-26T02:48:21.700 に答える