Поделиться через


Устранение неполадок в процессе упаковки

Джейсон Ли

В этом разделе описывается сбор подробных сведений о процессе упаковки с помощью свойства EnablePackageProcessLoggingAndAssert в Microsoft Build Engine (MSBuild).

Если для свойства EnablePackageProcessLoggingAndAssert задано значение true, MSBuild:

  • Добавьте дополнительные сведения о процессе упаковки в журналы сборки.
  • Регистрируйте ошибки при определенных условиях, например при обнаружении повторяющихся файлов в списке упаковки.
  • Создайте каталог Log в папке ProjectName_Package и используйте его для записи сведений о файлах, которые вы упаковывайте.

Если процесс упаковки завершается сбоем или пакеты веб-развертывания не содержат нужных файлов, эти сведения можно использовать для устранения неполадок процесса и выявления ошибок.

Примечание

Свойство EnablePackageProcessLoggingAndAssert работает только при сборке проекта с использованием конфигурации отладки . Свойство игнорируется в других конфигурациях.

Этот раздел является частью серии учебников, основанных на требованиях к корпоративному развертыванию вымышленной компании Fabrikam, Inc. В этой серии руководств используется пример решения диспетчера контактов для представления веб-приложения с реалистичным уровнем сложности, включая приложение ASP.NET MVC 3, службу Windows Communication Foundation (WCF) и проект базы данных.

Метод развертывания в основе этих учебников основан на подходе с разделением файлов проекта, описанном в разделе Общие сведения о файле проекта, в котором процесс сборки управляется двумя файлами проекта: один содержит инструкции по сборке, которые применяются к каждой конечной среде, а второй содержит параметры сборки и развертывания для конкретной среды. Во время сборки файл проекта для конкретной среды объединяется в файл проекта, не зависящий от среды, чтобы сформировать полный набор инструкций по сборке.

Основные сведения о свойстве EnablePackageProcessLoggingAndAssert

Сборка и упаковка проектов веб-приложений описывает, как конвейер веб-публикации (WPP) предоставляет набор целевых объектов MSBuild, которые расширяют функциональные возможности MSBuild и позволяют интегрировать его со средством веб-развертывания служб IIS . При упаковке проекта веб-приложения вы вызываете целевые объекты 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 определяются в файле Microsoft.Web.Publishing.targets в папке %PROGRAMFILES(x86)%\MSBuild\Microsoft\VisualStudio\v10.0\Web. Вы можете открыть этот файл и просмотреть целевые объекты в 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

Если вы используете пользовательский файл проекта для сборки проектов, можно включить значение EnablePackageProcessLoggingAndAssert в атрибут Properties задачи MSBuild :

<Target Name="BuildProjects" Condition=" '$(BuildingInTeamBuild)'!='true' ">
   <MSBuild Projects="@(ProjectsToBuild)"
            Properties="OutDir=$(OutputRoot);
                        Configuration=$(Configuration);
                        DeployOnBuild=true;
                        DeployTarget=Package;
                        EnablePackageProcessLoggingAndAssert=true"
            Targets="Build" />
  </Target>

Если вы используете определение сборки Team Foundation Server (TFS) для сборки проектов, можно указать значение для свойства EnablePackageProcessLoggingAndAssert в строке Аргументы MSBuild . Если для сборки проектов используется определение сборки Team Foundation Server (T F SS), можно указать значение для свойства EnablePackageProcessLoggingAndAssert в аргументах MSBuild.

Примечание

Дополнительные сведения о создании и настройке определений сборки см. в разделе Создание определения сборки, поддерживающего развертывание.

Кроме того, если вы хотите включить пакет в каждую сборку, можно изменить файл проекта для проекта веб-приложения, присвоив свойству EnablePackageProcessLoggingAndAssert значение true. Необходимо добавить свойство в первый элемент PropertyGroup в файле CSPROJ или VBPROJ.

<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 создает дополнительную папку с именем Log в папке ProjectName_Package. Папка Log содержит различные файлы:

MSBuild создает дополнительную папку с именем Log в папке ProjectName_Package.

Список файлов, который вы увидите, будет зависеть от того, что в проекте и в процессе сборки. Однако эти файлы обычно используются для записи списка файлов, которые WPP собирает для упаковки, на различных этапах процесса:

  • В файлеPreExcludePipelineCollectFilesPhaseFileList.txt перечислены файлы, которые MSBuild собирает для упаковки перед удалением файлов, указанных для исключения.

  • Файл AfterExcludeFilesFilesList.txt содержит список измененных файлов после удаления всех файлов, указанных для исключения.

    Примечание

    Дополнительные сведения об исключении файлов и папок из процесса упаковки см. в разделе Исключение файлов и папок из развертывания.

  • В файлеAfterTransformWebConfig.txt перечислены файлы, собранные для упаковки после выполнения любых преобразованийWeb.config . В этом списке все файлы преобразованияWeb.config конфигурации, такие как Web.Debug.config и Web.Release.config, исключаются из списка файлов для упаковки. Вместо них включается один преобразованный Web.config .

  • Файл PostAutoParameterizationWebConfigConnectionStrings.txt содержит список файлов после параметризации строк подключения в файлеWeb.config . Это процесс, который позволяет заменить строки подключения правильными параметрами для целевой среды при развертывании пакета.

  • Файл Prepackage.txt содержит готовый список файлов, которые будут включены в пакет перед сборкой.

Примечание

Имена дополнительных файлов журнала обычно соответствуют целевым объектам WPP. Эти целевые объекты можно просмотреть, изучив файл Microsoft.Web.Publishing.targets в папке %PROGRAMFILES(x86)%\MSBuild\Microsoft\VisualStudio\v10.0\Web.

Если содержимое веб-пакета не то, что вы ожидали, просмотр этих файлов может быть полезным способом определить, на каком этапе процесса все пошло не так.

Заключение

В этом разделе описано, как использовать свойство EnablePackageProcessLoggingAndAssert в MSBuild для устранения неполадок при упаковке. В ней описаны различные способы предоставления значения свойства в процесс сборки, а также описаны дополнительные сведения, которые записываются при присвоении свойству значения true.

Дополнительные материалы

Дополнительные сведения об использовании пользовательских файлов проекта MSBuild для управления процессом развертывания см. в разделах Общие сведения о файле проекта и Общие сведения о процессе сборки. Дополнительные сведения о WPP и управлении процессом упаковки см. в разделе Создание и упаковка проектов веб-приложений. Инструкции по исключению определенных файлов и папок из пакетов веб-развертывания см. в разделе Исключение файлов и папок из развертывания.