Give 및 MSBuild 작업이 AfterTargets="AfterCompile"
에서 실행되고 일부 파일이 생성되는 경우 어떻게 파일을 현재 프로젝트 출력에 포함시켜 파일을 복사 할 수 있습니까? 해당 프로젝트를 참조하는 모든 프로젝트의 bin 디렉토리MSBuild 작업에서 프로젝트 출력 파일에 파일을 추가하는 방법
2
A
답변
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를 "생성"하려는 것일뿐입니다. –
컴파일하기 전에 파일 경로를 알고있는 경우 BeforeTargets = "AssignTargetPaths"로 대상을 추가하고 그 안에 Content ItemGroup을 채울 수 있습니다. CopyToOutputDirectory 메타 데이터가 true로 설정되어 있으면 해당 프로젝트에 복사됩니다. 나는 편집 후 이것을 어떻게 하는지를 즉시 알지 못한다. – stijn