2012-03-15 11 views
3

自分でビルドスクリプトを作成したいので、msbuildを調べ始めました。今のところ、1つのプロジェクトだけをコンパイルするビルドスクリプトを作成できますが、どのように依存関係を処理しますか?msbuildで従属プロジェクトを最初にビルドする方法

たとえば、これら2つのmsbuildスクリプトで2つのプロジェクトをビルドするとどうなりますか?

  1. projectA.xml
  2. projectB.xml

どのように私はそれが最初projectA.xmlを実行する必要があることを私はprojectB.xmlを実行していますというのMSBuildを教えていますか?

私はこれについてたくさん調べましたが、私のようなスターターが理解できるものは何も得られていないようです。私はこれを記述する記事へのリンク、あるいはほんの少しのコード例に満足しています。

私がこのコントロールをしたい理由は、私が構築しているライブラリのためです。図書館はいくつかのプロジェクトで構成されています。開発者は、ライブラリのソースコードを取得し、必要なライブラリのみをビルドすることができます。

実際には、さまざまなプロジェクトの.netモジュールをビルドできるようにしたいと考えています。そのため、私はカスタマイズされたmsbuildスクリプトを実行できるようにしたいのです。あなたはMSBuildのでの.slnファイルをターゲット、直接ではなく、プロジェクトを構築することができる2つのプロジェクトとソリューションを作成する場合は、使用している場合

答えて

1

ビルドスクリプトをセットアップして何もしない共通ターゲットをいくつか持っていますが、DependsOnTargetsを使用してプロジェクトの依存関係をセットアップし、ビルドを実行してください。

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

    <!-- ************************************************************************************************ --> 
    <!-- Targets that run the builds --> 
    <!-- ************************************************************************************************ --> 
    <Target Name="AutoBuild" DependsOnTargets="BuildProject1;BuildProject2;BuildInstallers"> 
    <OnError ExecuteTargets="NotifyFailure" /> 
    </Target> 
    <Target Name="FullCompile" DependsOnTargets="BuildProject1;BuildProject2"> 
    <OnError ExecuteTargets="NotifyFailure" /> 
    </Target> 

    <!-- Build Project 1 --> 
    <Target Name="BuildProject1"> 
    <!-- Use MSBuild task and point it to build project1.csproj, project1.sln or whatever your projects is --> 
    </Target> 

    <!-- Build Project 2 --> 
    <Target Name="BuildProject2"> 
    <!-- Use MSBuild task and point it to build project2.csproj, project2.sln or whatever your projects is --> 
    </Target> 

    <Target Name="BuildInstallers"> 
    <!-- Whatever logic you have for building installers --> 
    </Target> 

</Project> 
+0

MSBuildタスクのヒントのためにこれを受け入れました。これはまさに私が使いたいものです。この作業では、別のプロジェクトを作成して参照することができます。ありがとうございました。 – mslot

+0

実際に私のソリューションにそれらを含めることなくプロジェクトを構築したいのですが、これは可能ですか? –

5

、それはプロジェクトの依存関係:)

の世話をする必要がありますしかし、それはです標準.csprojプロジェクト...

[OK]を、私は私が働いているプロジェクトを見て、そしてそれはこのようなものだ:

<ItemGroup> 
    <ProjectReference Include="..\SomeFolder\SomeProject.csproj"> 
     <Project>{1A94B405-2D01-4A09-90D5-A5B31180A03B}</Project> 
     <Name>SomeProjectNamespace</Name> 
    </ProjectReference> 
</ItemGroup> 

そして、ここでは参照に関するMSDN pageです。 ProjectReferenceが見つかるまでスクロールしてください。

+0

さらに私の答えに、多分あなたは、多分それはあなた自身に依存関係を実行する方法を教えてよ、他に依存して1と2つのプロジェクトを作成しての.slnと.csprojファイルがどのように見えるかを見ることができましたカスタムスクリプト。 – joshuahealy

+0

私の最後のコメントに加えて、私はそれをあなたのために行い、詳細を使って私の答えを編集しました: – joshuahealy

+1

+1の.slnファイルを提案します。 VisualStudioにビルドの順序を管理させたくない理由がなければ、ホイールを再構築しないでください。 – Bronumski

0

slnを使用してビルドする必要はありません。 csprojでプロジェクト参照を使用する場合、依存関係の順序はMSBuildで処理されます。 試してみてください。自動的に msbuildスクリプトで依存関係の順序をソートする必要はありません。

+0

これは必ずしも機能しません。ソリューションをVS 2010からVS 2012に変換すると、その依存プロジェクトはMSBuild.exeでビルドされることはありません(しかし、VS 2012で行われます)。しかし、 "appclay"で説明されているようにプロジェクトのヒントを追加すると、両方で動作します。 –

関連する問題