Aracılığıyla paylaş


Paketleme İşleminin Sorunlarını Giderme

tarafından Jason Lee

Bu konuda, Microsoft Build Engine (MSBuild) EnablePackageProcessLoggingAndAssert özelliğini kullanarak paketleme işlemi hakkında ayrıntılı bilgileri nasıl toplayabileceğiniz açıklanır.

EnablePackageProcessLoggingAndAssert özelliğini true olarak ayarladığınızda MSBuild şunları yapacaktır:

  • Derleme günlüklerine paketleme işlemi hakkında ek bilgi ekleyin.
  • Örneğin, paketleme listesinde yinelenen dosyalar bulunursa, belirli koşullar altında hataları günlüğe kaydetme.
  • ProjectName_Package klasöründe bir Günlük dizini oluşturun ve bu dizini kullanarak paketlediğiniz dosyalar hakkındaki bilgileri kaydedin.

Paketleme işlemi başarısız oluyorsa veya web dağıtım paketleriniz beklediğiniz dosyaları içermiyorsa, işlem sorunlarını gidermek ve işlerin nerede ters gittiğini saptamak için bu bilgileri kullanabilirsiniz.

Not

EnablePackageProcessLoggingAndAssert özelliği yalnızca hata ayıklama yapılandırmasını kullanarak projenizi oluşturursanız çalışır. özelliği diğer yapılandırmalarda yoksayılır.

Bu konu, Fabrikam, Inc. adlı kurgusal bir şirketin kurumsal dağıtım gereksinimlerini temel alan bir dizi öğreticinin bir bölümünü oluşturur. Bu öğretici serisi, ASP.NET MVC 3 uygulaması, Windows Communication Foundation (WCF) hizmeti ve veritabanı projesi dahil olmak üzere gerçekçi bir karmaşıklık düzeyine sahip bir web uygulamasını temsil etmek için örnek bir çözüm (Contact Manager çözümü) kullanır.

Bu öğreticilerin merkezinde yer alan dağıtım yöntemi, derleme işleminin iki proje dosyası tarafından denetlendiği Proje Dosyasını Anlama bölümünde açıklanan bölünmüş proje dosyası yaklaşımını temel alır: biri her hedef ortama uygulanan derleme yönergelerini, diğeri de ortama özgü derleme ve dağıtım ayarlarını içerir. Derleme zamanında, ortama özgü proje dosyası, tam bir derleme yönergeleri kümesi oluşturmak için ortama özgü belirsiz proje dosyasıyla birleştirilir.

EnablePackageProcessLoggingAndAssert Özelliğini Anlama

Web Uygulaması Projeleri Oluşturma ve Paketleme Web Yayımlama İşlem Hattı'nın (WPP) MSBuild işlevselliğini genişleten ve Internet Information Services (IIS) Web Dağıtım Aracı (Web Dağıtımı) ile tümleştirilmesini sağlayan bir msbuild hedefleri kümesini nasıl sağladığını açıklamaktadır. Bir web uygulaması projesini paketlediğinizde WPP hedeflerini çağırırsınız.

Bu WPP hedeflerinin birçoğu , EnablePackageProcessLoggingAndAssert özelliği true olarak ayarlandığında ek bilgileri günlüğe kaydeden koşullu mantık içerir. Örneğin, Paket hedefini gözden geçirirseniz, EnablePackageProcessLoggingAndAssertdeğeri true'ya eşitse ek bir günlük dizini oluşturduğunu ve bir metin dosyasına dosya listesi yazdığını görebilirsiniz.

<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" />

Not

WPP hedefleri, %PROGRAMFILES(x86)%\MSBuild\Microsoft\VisualStudio\v10.0\Web klasöründeki Microsoft.Web.Publishing.targets dosyasında tanımlanır. Bu dosyayı açabilir ve Visual Studio 2010'da veya herhangi bir XML düzenleyicisinde hedefleri gözden geçirebilirsiniz. Dosyanın içeriğini değiştirmemeye dikkat edin.

Ek Günlüğü Etkinleştirme

Projenizi nasıl derlediğinize bağlı olarak EnablePackageProcessLoggingAndAssert özelliği için çeşitli yollarla bir değer sağlayabilirsiniz.

Projenizi komut satırından derlerseniz, EnablePackageProcessLoggingAndAssert özelliği için komut satırı bağımsız değişkeni olarak bir değer sağlayabilirsiniz:

MSBuild.exe /t:Build
            /p:Configuration=DEBUG
            /p:DeployOnBuild=true
            /p:DeployTarget=Package
            /p:EnablePackageProcessLoggingAndAssert=true
            [Your project].csproj

Projelerinizi derlemek için özel bir proje dosyası kullanıyorsanız, MSBuild görevinin Özellikler özniteliğine EnablePackageProcessLoggingAndAssert değerini ekleyebilirsiniz:

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

Projelerinizi derlemek için Team Foundation Server (TFS) derleme tanımı kullanıyorsanız MSBuild Bağımsız Değişkenleri satırında EnablePackageProcessLoggingAndAssert özelliği için bir değer sağlayabilirsiniz:Projelerinizi derlemek için Team Foundation Server (T F S) derleme tanımı kullanıyorsanız, MSBuild Bağımsız Değişkenleri'nde EnablePackageProcessLoggingAndAssert özelliği için bir değer sağlayabilirsiniz.

Not

Derleme tanımlarını oluşturma ve yapılandırma hakkında daha fazla bilgi için bkz. Dağıtımı Destekleyen Derleme Tanımı Oluşturma.

Alternatif olarak, paketi her derlemeye eklemek isterseniz, web uygulaması projenizin proje dosyasını değiştirerek EnablePackageProcessLoggingAndAssert özelliğini true olarak ayarlayabilirsiniz. özelliğini .csproj veya .vbproj dosyanızdaki ilk PropertyGroup öğesine eklemelisiniz.

<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="...">
  <PropertyGroup>
    <EnablePackageProcessLoggingAndAssert 
       Condition=" '$(EnablePackageProcessLoggingAndAssert)' == '' ">
         true
    </EnablePackageProcessLoggingAndAssert>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

Günlük Dosyalarını Gözden Geçirme

EnablePackageProcessLoggingAndAssert değeri true olarak ayarlanmış bir web uygulaması projesi derleyip paketlediğinizde, MSBuild ProjectName_Package klasöründe Log adlı ek bir klasör oluşturur. Günlük klasörü çeşitli dosyalar içerir:

MSBuild, ProjectName_Package klasöründe Log adlı ek bir klasör oluşturur.

Gördüğünüz dosyaların listesi, projenizdeki şeylere ve derleme işleminize göre değişir. Ancak, bu dosyalar genellikle WPP'nin paketleme için topladığı dosyaların listesini işlemin çeşitli aşamalarında kaydetmek için kullanılır:

  • PreExcludePipelineCollectFilesPhaseFileList.txt dosyasında, dışlama için belirtilen dosyalar kaldırılmadan önce MSBuild'in paketleme için topladığı dosyalar listelenir.

  • AfterExcludeFilesFilesList.txt dosyası, dışlama için belirtilen tüm dosyalar kaldırıldıktan sonra değiştirilen dosya listesini içerir.

    Not

    Dosyaları ve klasörleri paketleme işleminden dışlama hakkında daha fazla bilgi için bkz. Dosyaları ve Klasörleri Dağıtımdan Dışlama.

  • AfterTransformWebConfig.txt dosyasında, herhangi bir Web.config dönüştürme işlemi gerçekleştirildikten sonra paketleme için toplanan dosyalar listelenir. Bu listede, Web.Debug.configveWeb.Release.config gibi yapılandırmaya özgü Web.config dönüştürme dosyaları paketleme dosyaları listesinden çıkarılır. Bunların yerine tek bir dönüştürülmüş Web.config dahildir.

  • PostAutoParameterizationWebConfigConnectionStrings.txt dosyası, Web.config dosyasındaki bağlantı dizeleri parametrelendirildikten sonra dosyaların listesini içerir. Bu, paketi dağıtırken bağlantı dizelerinizi hedef ortamınız için doğru ayarlarla değiştirmenizi sağlayan işlemdir.

  • Prepackage.txt dosyası, pakete eklenecek dosyaların son haline getirilmiş derleme öncesi listesini içerir.

Not

Ek günlük dosyalarının adları genellikle WPP hedeflerine karşılık gelir. %PROGRAMFILES(x86)%\MSBuild\Microsoft\VisualStudio\v10.0\Web klasöründeki Microsoft.Web.Publishing.targets dosyasını inceleyerek bu hedefleri gözden geçirebilirsiniz.

Web paketinizin içeriği beklediğiniz gibi değilse, bu dosyaları gözden geçirmek sürecin hangi noktasında işlerin yanlış gittiğini belirlemenin yararlı bir yolu olabilir.

Sonuç

Bu konuda, paketleme işlemiyle ilgili sorunları gidermek için MSBuild'deki EnablePackageProcessLoggingAndAssert özelliğini nasıl kullanabileceğiniz açıklanmıştır. Derleme işlemine özellik değerini sağlayabilmenizin farklı yolları açıklanmış ve özelliği true olarak ayarladığınızda kaydedilen ek bilgiler açıklanmıştır.

Daha Fazla Bilgi

Dağıtım işlemini denetlemek için özel MSBuild proje dosyalarını kullanma hakkında daha fazla bilgi için bkz. Proje Dosyasını Anlama ve Derleme sürecini anlama. WPP ve paketleme sürecini nasıl yönettiği hakkında daha fazla bilgi için bkz. Web Uygulaması Projeleri Oluşturma ve Paketleme. Belirli dosya ve klasörleri web dağıtım paketlerinin dışında tutma yönergeleri için bkz. Dosyaları ve Klasörleri Dağıtımdan Dışlama.