다음을 통해 공유


솔루션 빌드 사용자 지정

MSBuild에서 솔루션 파일을 빌드할 때 먼저 프로젝트 파일로 내부적으로 변환한 다음, 빌드합니다. 생성된 프로젝트 파일은 $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\SolutionFile\ImportBefore$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\SolutionFile\ImportAfter 디렉터리에 설치된 대상을 포함하여 대상을 정의하기 전에 before.{solutionname}.sln.targets를 가져오고 대상을 가져온 후에 after.{solutionname}.sln.targets를 가져옵니다.

예를 들어 포함하는 after.MyCustomizedSolution.sln.targets라는 동일한 디렉터리에 파일을 만들어 MyCustomizedSolution.sln을 빌드한 후 사용자 지정 로그 메시지를 작성하도록 새 대상을 정의할 수 있습니다.

<Project>
 <Target Name="EmitCustomMessage" AfterTargets="Build">
   <Message Importance="High" Text="The solution has completed the Build target" />
 </Target>
</Project>

솔루션 빌드는 프로젝트 빌드와 별개이므로 여기의 설정은 프로젝트 빌드에 영향을 주지 않습니다.

Important

이러한 방식의 솔루션 빌드 사용자 지정은 MSBuild.exe를 사용하여 명령줄 빌드에만 적용됩니다. Visual Studio 내의 빌드에 적용되지 않습니다. 따라서 솔루션 수준에서 사용자 지정을 추가하지 않는 것이 좋습니다. 솔루션의 모든 프로젝트를 사용자 지정하기 위한 더 나은 대안은 이 문서의 다른 부분에서 설명한 대로 솔루션 폴더에 Directory.Build.propsDirectory.build.targets 파일을 사용하는 것이 좋습니다.

동일한 방식으로 확장하려는 솔루션 파일이 많지만 $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\SolutionFile\ 폴더에 쓰지 않으려는 경우(일반적으로 상승된 권한이 필요함) Directory.Solution.propsDirectory.Solution.targets 파일을 만들고 확장하려는 솔루션 파일 위의 루트 경로에 배치할 수 있습니다. Directory.Solution.props는 솔루션 빌드의 시작에서 가져오고 Directory.Solution.targets는 솔루션 빌드의 끝에서 가져옵니다. 솔루션 파일을 빌드할 때는 Directory.Build.propsDirectory.Build.targets를 가져오지 않으므로 Directory.Solution.propsDirectory.Solution.targets를 대신 사용해야 합니다. 서로 암시적으로 가져오지 않습니다.

루트 폴더에 Directory.Solution.props 또는 Directory.Solution.targets가 있지만 해당 폴더 아래에 가져오지 않으려는 솔루션이 있는 경우 앞에서 언급한 솔루션별 파일 before.{solutionname}.sln.targetsafter.{solutionname}.sln.targets를 사용하여 $(ImportDirectorySolutionProps)$(ImportDirectorySolutionTargets) 속성을 false로 설정할 수 있습니다. 또는 $(DirectorySolutionPropsPath)$(DirectorySolutionTargetsPath) 속성을 사용하여 해당 파일에 다른 위치를 지정할 수 있습니다. 이는 솔루션의 다양한 하위 집합에 공통된 특정 속성 값 또는 대상이 필요한 경우에 유용할 수 있습니다.