2016-12-13 2 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를 "생성"하려는 것일뿐입니다. –