패키징 프로세스 문제 해결
작성자: Jason Lee
이 항목에서는 Microsoft Build Engine(MSBuild)의 EnablePackageProcessLoggingAndAssert 속성을 사용하여 패키징 프로세스에 대한 자세한 정보를 수집하는 방법을 설명합니다.
EnablePackageProcessLoggingAndAssert 속성을 true로 설정하면 MSBuild는 다음을 수행합니다.
- 빌드 로그에 패키징 프로세스에 대한 추가 정보를 추가합니다.
- 예를 들어 패키지 목록에 중복 파일이 있는 경우와 같이 특정 조건에서 오류를 기록합니다.
- ProjectName_Package 폴더에 로그 디렉터리를 만들고 이를 사용하여 패키징하는 파일에 대한 정보를 기록합니다.
패키징 프로세스가 실패하거나 웹 배포 패키지에 예상한 파일이 없는 경우 이 정보를 사용하여 프로세스 문제를 해결하고 문제가 발생하는 위치를 파악할 수 있습니다.
참고
EnablePackageProcessLoggingAndAssert 속성은 디버그 구성을 사용하여 프로젝트를 빌드하는 경우에만 작동합니다. 속성은 다른 구성에서 무시됩니다.
이 항목은 Fabrikam, Inc.라는 가상 회사의 엔터프라이즈 배포 요구 사항을 기반으로 하는 일련의 자습서의 일부를 구성합니다. 이 자습서 시리즈에서는 샘플 솔루션인 Contact Manager 솔루션을 사용하여 ASP.NET MVC 3 애플리케이션, WCF(Windows Communication Foundation) 서비스 및 데이터베이스 프로젝트를 포함하여 현실적인 수준의 복잡성이 있는 웹 애플리케이션을 나타냅니다.
이 자습서의 핵심인 배포 방법은 프로젝트 파일 이해에 설명된 분할 프로젝트 파일 접근 방식을 기반으로 하며, 빌드 프로세스는 모든 대상 환경에 적용되는 빌드 지침과 환경별 빌드 및 배포 설정을 포함하는 두 개의 프로젝트 파일에 의해 제어됩니다. 빌드 시 환경별 프로젝트 파일은 환경에 구애받지 않은 프로젝트 파일로 병합되어 전체 빌드 지침 집합을 형성합니다.
EnablePackageProcessLoggingAndAssert 속성 이해
웹 애플리케이션 프로젝트 빌드 및 패키징 은 WPP(웹 게시 파이프라인)가 MSBuild의 기능을 확장하고 IIS(인터넷 정보 서비스) 웹 배포 도구(웹 배포)와 통합할 수 있도록 하는 MSBuild 대상 집합을 제공하는 방법을 설명했습니다. 웹 애플리케이션 프로젝트를 패키지할 때 WPP 대상을 호출합니다.
이러한 많은 WPP 대상에는 EnablePackageProcessLoggingAndAssert 속성이 true로 설정된 경우 추가 정보를 기록하는 조건부 논리가 포함됩니다. 예를 들어 패키지 대상을 검토하면 EnablePackageProcessLoggingAndAssert 가 true인 경우 추가 로그 디렉터리를 만들고 파일 목록을 텍스트 파일에 쓰는 것을 볼 수 있습니다.
<Target Name="Package"
Condition="$(_CreatePackage)"
DependsOnTargets="$(PackageDependsOn)">
<!--Log the information Set $(EnablePackageProcessLoggingAndAssert) to True
if you want to see this information-->
<MakeDir Condition="$(EnablePackageProcessLoggingAndAssert) And
!Exists('$(PackageLogDir)')"
Directories="$(PackageLogDir)" />
<WriteLinesToFile Condition="$(EnablePackageProcessLoggingAndAssert)"
Encoding="utf-8"
File="$(PackageLogDir)\Prepackage.txt"
Lines="@(FilesForPackagingFromProject->'
From:%(Identity)
DestinationRelativePath:%(DestinationRelativePath)
Exclude:%(Exclude)
FromTarget:%(FromTarget)
Category:%(Category)
ProjectFileType:%(ProjectFileType)')"
Overwrite="True" />
참고
WPP 대상은 %PROGRAMFILES(x86)%\MSBuild\Microsoft\VisualStudio\v10.0\Web 폴더의 Microsoft.Web.Publishing.targets 파일에 정의되어 있습니다. 이 파일을 열고 Visual Studio 2010 또는 XML 편집기에서 대상을 검토할 수 있습니다. 파일의 내용을 수정하지 않도록 주의하세요.
추가 로깅 사용
프로젝트를 빌드하는 방법에 따라 다양한 방법으로 EnablePackageProcessLoggingAndAssert 속성에 대한 값을 제공할 수 있습니다.
명령줄에서 프로젝트를 빌드하는 경우 EnablePackageProcessLoggingAndAssert 속성에 대한 값을 명령줄 인수로 제공할 수 있습니다.
MSBuild.exe /t:Build
/p:Configuration=DEBUG
/p:DeployOnBuild=true
/p:DeployTarget=Package
/p:EnablePackageProcessLoggingAndAssert=true
[Your project].csproj
사용자 지정 프로젝트 파일을 사용하여 프로젝트를 빌드하는 경우 MSBuild 작업의 Properties 특성에 EnablePackageProcessLoggingAndAssert 값을 포함할 수 있습니다.
<Target Name="BuildProjects" Condition=" '$(BuildingInTeamBuild)'!='true' ">
<MSBuild Projects="@(ProjectsToBuild)"
Properties="OutDir=$(OutputRoot);
Configuration=$(Configuration);
DeployOnBuild=true;
DeployTarget=Package;
EnablePackageProcessLoggingAndAssert=true"
Targets="Build" />
</Target>
TFS(Team Foundation Server) 빌드 정의를 사용하여 프로젝트를 빌드하는 경우 MSBuild 인수 행의 EnablePackageProcessLoggingAndAssert 속성에 대한 값을 제공할
참고
빌드 정의를 만들고 구성하는 방법에 대한 자세한 내용은 배포를 지원하는 빌드 정의 만들기를 참조하세요.
또는 모든 빌드에 패키지를 포함하려는 경우 웹 애플리케이션 프로젝트의 프로젝트 파일을 수정하여 EnablePackageProcessLoggingAndAssert 속성을 true로 설정할 수 있습니다. 속성을 .csproj 또는 .vbproj 파일 내의 첫 번째 PropertyGroup 요소에 추가해야 합니다.
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="...">
<PropertyGroup>
<EnablePackageProcessLoggingAndAssert
Condition=" '$(EnablePackageProcessLoggingAndAssert)' == '' ">
true
</EnablePackageProcessLoggingAndAssert>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
로그 파일 검토
EnablePackageProcessLoggingAndAssert가 true로 설정된 웹 애플리케이션 프로젝트를 빌드하고 패키징하면 MSBuild는 ProjectName_Package 폴더에 Log라는 추가 폴더를 만듭니다. Log 폴더에는 다음과 같은 다양한 파일이 포함되어 있습니다.
표시되는 파일 목록은 프로젝트 및 빌드 프로세스의 항목에 따라 달라집니다. 그러나 이러한 파일은 일반적으로 WPP가 패키징을 위해 수집하는 파일 목록을 프로세스의 다양한 단계에서 기록하는 데 사용됩니다.
PreExcludePipelineCollectFilesPhaseFileList.txt 파일은 제외에 지정된 파일이 제거되기 전에 MSBuild가 패키징을 위해 수집하는 파일을 나열합니다.
제외로 지정된 파일이 제거된 후 AfterExcludeFilesFilesList.txt 파일에 수정된 파일 목록이 포함됩니다.
참고
패키징 프로세스에서 파일 및 폴더를 제외하는 방법에 대한 자세한 내용은 배포에서 파일 및 폴더 제외를 참조하세요.
AfterTransformWebConfig.txt 파일은 Web.config 변환이 수행된 후 패키징을 위해 수집된 파일을 나열합니다. 이 목록에서는 Web.Debug.config및Web.Release.config 같은 구성별 Web.config 변환 파일은 패키징용 파일 목록에서 제외 됩니다. 변환된 단일 Web.config 해당 위치에 포함됩니다.
PostAutoParameterizationWebConfigConnectionStrings.txt 파일에는 Web.config 파일의 연결 문자열이 매개 변수화된 후의 파일 목록이 포함됩니다. 패키지를 배포할 때 연결 문자열을 대상 환경에 적합한 설정으로 바꿀 수 있는 프로세스입니다.
Prepackage.txt 파일에는 패키지에 포함할 최종 빌드 전 파일 목록이 포함되어 있습니다.
참고
추가 로그 파일의 이름은 일반적으로 WPP 대상에 해당합니다. %PROGRAMFILES(x86)%\MSBuild\Microsoft\VisualStudio\v10.0\Web 폴더에서 Microsoft.Web.Publishing.targets 파일을 검사하여 이러한 대상을 검토할 수 있습니다.
웹 패키지의 내용이 예상과 다른 경우 이러한 파일을 검토하면 프로세스의 문제가 발생한 시점을 식별하는 데 유용한 방법이 될 수 있습니다.
결론
이 항목에서는 MSBuild에서 EnablePackageProcessLoggingAndAssert 속성을 사용하여 패키징 프로세스 문제를 해결하는 방법을 설명했습니다. 빌드 프로세스에 속성 값을 제공할 수 있는 다양한 방법을 설명하고 속성을 true로 설정할 때 기록되는 추가 정보를 설명했습니다.
추가 정보
사용자 지정 MSBuild 프로젝트 파일을 사용하여 배포 프로세스를 제어하는 방법에 대한 자세한 내용은 프로젝트 파일 이해 및 빌드 프로세스 이해를 참조하세요. WPP 및 패키징 프로세스를 관리하는 방법에 대한 자세한 내용은 웹 애플리케이션 프로젝트 빌드 및 패키징을 참조하세요. 웹 배포 패키지에서 특정 파일 및 폴더를 제외하는 방법에 대한 지침은 배포에서 파일 및 폴더 제외를 참조하세요.