다음을 통해 공유


패키징 프로세스 문제 해결

작성자: 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 속성에 대한 값을 제공할 수 있습니다. T FS(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>

로그 파일 검토

EnablePackageProcessLoggingAndAsserttrue로 설정된 웹 애플리케이션 프로젝트를 빌드하고 패키징하면 MSBuild는 ProjectName_Package 폴더에 Log라는 추가 폴더를 만듭니다. Log 폴더에는 다음과 같은 다양한 파일이 포함되어 있습니다.

MSBuild는 ProjectName_Package 폴더에 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 및 패키징 프로세스를 관리하는 방법에 대한 자세한 내용은 웹 애플리케이션 프로젝트 빌드 및 패키징을 참조하세요. 웹 배포 패키지에서 특정 파일 및 폴더를 제외하는 방법에 대한 지침은 배포에서 파일 및 폴더 제외를 참조하세요.