2016-12-13 9 views
2

GiveおよびMSBuildタスクAfterTargets="AfterCompile"で実行され、いくつかのファイルが生成されます。これらのファイルを現在のプロジェクト出力にどのように含めて、ファイルをコピーするかそのプロジェクトを参照するすべてのプロジェクトのbinディレクトリMSBuildタスクからプロジェクト出力ファイルにファイルを追加する方法

+1

編集前のファイルパスを知っている場合は、BeforeTargets = "AssignTargetPaths"でターゲットを追加し、その中にContent ItemGroupを設定できます.CopyToOutputDirectoryメタデータがtrueに設定されていると、依存するプロジェクトにコピーされます。私はコンパイル後にこれをどうやって行うのかをすぐには知りません。 – stijn

答えて

0

私は、これは適切なソリューションであるという保証はありませんが、動作するようです:

<Target Name="MyTarget" AfterTargets="AfterCompile"> 
    <PropertyGroup> 
    <MyInput>D:\1.txt</MyInput> 
    <MyOutput>$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)$(OutDir)\1.txt'))</MyOutput> 
    </PropertyGroup> 
    <Copy SourceFiles="$(MyInput)" DestinationFolder="$(OutDir)" SkipUnchangedFiles="true" /> 
    <ItemGroup> 
    <AllItemsFullPathWithTargetPath Include="$(MyOutput)"> 
     <TargetPath>1.txt</TargetPath> 
     <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
    </AllItemsFullPathWithTargetPath> 
    </ItemGroup> 
</Target> 

関連するロジックはここにある: http://source.roslyn.io/#MSBuildTarget=GetCopyToOutputDirectoryItems http://source.roslyn.io/#MSBuildItem=AllItemsFullPathWithTargetPath

基本的に、依存するプロジェクトからコピーするファイルのリストを決定するために、MSBuildは依存プロジェクトのGetCopyToOutputDirectoryItemsターゲットを呼び出し、その出力(AllItemsFullPathWithTargetPath)を使用します。

最終的にAllItemsFullPathWithTargetPathに自分自身を追加することによって、従属プロジェクトが私たちを呼び出すときにピックアップされます。

+0

MyTargetのコピータスクは不要で、最初のプロジェクトの出力に1.txtを "生成"するようなふりをしていることに注意してください。 –

関連する問題