생성된 파일을 처리하도록 빌드 사용자 지정

지정된 빌드에서 빌드 중에 생성되는 파일은 정적 파일(예: 원본 파일)과 다르게 동작합니다. 이러한 이유로 MSBuild가 프로젝트를 빌드하는 방법을 이해하는 것이 중요합니다. 두 단계는 평가 단계실행 단계입니다. 평가 단계에서 MSBuild는 프로젝트를 읽고, 모든 항목을 가져오고, 속성을 만들고, 항목에 대한 GLOB를 확장하고, 빌드 프로세스를 설정합니다. 실행 단계에서 MSBuild는 평가 단계 중에 구문 분석한 데이터를 통해 대상 및 작업을 실행하여 빌드를 수행합니다.

실행 중에 생성된 파일은 평가 단계 중에 존재하지 않으므로 빌드 프로세스에 포함되지 않습니다. 이 문제를 해결하려면 생성된 파일을 빌드 프로세스에 수동으로 추가해야 합니다. 이 작업을 수행하는 권장 방법은 다음 예제와 같이 BeforeBuild 대상 앞의 Content 또는 None 항목에 새 파일을 추가하는 것입니다.

<Target Name="MyTarget" BeforeTargets="BeforeBuild">
  
  <!-- Some logic that generates your file goes here -->
  <!-- Generated files should be placed in $(IntermediateOutputPath) -->

  <ItemGroup>
    <!-- If your generated file was placed in `obj\` -->
    <None Include="$(IntermediateOutputPath)my-generated-file.xyz" CopyToOutputDirectory="PreserveNewest"/>
    <!-- If you know exactly where that file is going to be, you can hard code the path. -->
    <None Include="some\specific\path\my-generated-file.xyz" CopyToOutputDirectory="PreserveNewest"/>
    
    <!-- If you want to capture "all files of a certain type", you can glob like so. -->
    <None Include="some\specific\path\*.xyz" CopyToOutputDirectory="PreserveNewest"/>
    <None Include="some\specific\path\*.*" CopyToOutputDirectory="PreserveNewest"/>
  </ItemGroup>
</Target>

생성된 파일을 None 또는 Content에 추가하면 빌드 프로세스에서 확인할 수 있습니다. 또한 적절한 시점에 추가되도록 해야 합니다. 이상적으로는 대상이 BeforeBuild 전에 실행되는 것이 좋습니다. AssignTargetPaths은 다른 항목 중에서 NoneContent 항목을 새 항목으로 변환되기 전에 수정할 수 있는 마지막 기회이기 때문에 또 다른 가능한 대상입니다. 일반적인 항목 종류를 참조하세요.