2010-12-14 33 views
0

私は2つのプロジェクトを持つソリューションを持っています。そのうちの1つは、構築する特別なアセンブリに依存しないシンプルなプロジェクトです。しかし、アプリケーションは外部実行可能ファイルを起動することができます(私自身も - これは私のソリューションの2番目のプロジェクトです)。私はプロジェクトをビルドするときに、外部プロジェクトの実行可能ファイル(app.configなどの依存関係)をプロジェクトのターゲットディレクトリの下にコピーしたいと思います。MsBuildでファイルをコピー

これをMsBuildでどうすれば実現できますか?私の最初のアイデアは、ファイルをコピーするために実行可能ファイルへの参照を追加することです(ビルドする必要はありませんが)。これは私にとってちょっとハッキリなようです。

ありがとうございます!

P.S.別の質問:実行可能ファイルをコピーするようにMsBuildに伝えることができます。実行ファイルがビルドされていない場合はどうなりますか?それを強制的に構築することはできますか?

答えて

1

MSBuildのコピータスク:Copy Taskを見ましたか?

<Project DefaultTargets="Executable_A"> 
    <Target Name="Executable_A" DependsOnTargets="Executable_B"> 
     <MSBuild Projects="Executable_A.proj" Targets="Build" /> 
    </Target> 

    <Target Name="Executable_B"> 
     <MSBuild Projects="Executable_B.proj" Targets="Build"> 
      <Output TaskParameter="TargetOutputs" ItemName="AssembliesBuilt" /> 
     </MSBuild> 
     <Copy SourceFiles="@(AssembliesBuilt)" DestinationFolder="C:\My_Target_Path\" SkipUnchangedFiles="true" /> 
    </Target> 
</Project> 

...と希望に出力をコピーするために、あなたの目のプロジェクトの目標を指示することができます:あなたはMSBuildのスクリプトはあなたのソリューションを交換し、そこに必要な依存関係を宣言するべきであるあなたの場合

3

ロケーション。 2番目のプロジェクト(DestinationFolder)の出力をコピーするときに、出力パスを変数に格納するように、最初のプロジェクトに指示することもできます。

+0

Eh Filburt、私はちょうどこの解決策を試して、これは私が探しているものです!ただし、Executable_Bのapp.config(および他の依存関係)はコピーされません。どんな考え? – Martin

+0

@マーティンハァッ...正直言って、これを自分で見なければならないだろう。 TargetOutputsは、プロジェクト自体から実際にビルドされたものだけを取得します。また、SkipUnchangedFilesを省略することもできます。正しい出力パラメータを見つけるとすぐに私の答えを更新します。 – Filburt

+0

私はまだこれに対する解決策を見つけていません。何か案が? – Martin

0

@Filburtの回答に満足したら、この解決方法を改善することを提案できます。

デフォルトビルドターゲットがどのように機能するかを見ていきます場合:

<Target 
    Name="Build" 
    Condition=" '$(_InvalidConfigurationWarning)' != 'true' " 
    DependsOnTargets="$(BuildDependsOn)" 
    Returns="$(TargetPath)" /> 

あなたはビルドからのみ出力やターゲットを再構築が$(TargetPathが)であることがわかります。 $(TargetPath)は、ビルドされたアセンブリへのフルパスです。この動作を変更するには、ビルドプロセスをハックすることができます。このソリューションは、する必要はありません

<Target Name="AfterBuild"> 
    <MSBuild Projects="Executable_B.proj" Targets="BuildWithConfig"> 
     <Output TaskParameter="TargetOutputs" ItemName="AssembliesBuilt" /> 
    </MSBuild> 
    <Copy SourceFiles="@(AssembliesBuilt)" DestinationFolder="$(OutDir)\SubDirForB" SkipUnchangedFiles="true" /> 
</Target> 

:ちょうどAfterBuildターゲットを定義

<Target 
    Name="BuildWithConfig" 
    DependsOnTargets="Clean;Build" 
    Returns="$(TargetPath);$(TargetPath).config" /> 

プロジェクト:しかし、プロジェクトにBを独自の目標を定義する単純一致しますカスタムビルドスクリプトを作成します。あなたはVSで直接結果を得るでしょう。

関連する問題