Aracılığıyla paylaş


MSBuild sorunları için günlükleri giderme ve oluşturma

Aşağıdaki yordamlar Visual Studio projenizdeki derleme sorunlarını tanılamanıza ve gerekirse araştırma için Microsoft'a göndermek üzere bir günlük oluşturmanıza yardımcı olabilir.

Özellik değeri yoksayıldı

Bir proje özelliği belirli bir değere ayarlanmış gibi görünüyorsa ancak derleme üzerinde hiçbir etkisi yoksa şu adımları izleyin:

  1. Visual Studio sürümünüze karşılık gelen Visual Studio Geliştirici Komut İstemi'ni açın.

  2. Çözüm yolunuz, yapılandırmanız ve proje adınızın değerlerini değiştirdikten sonra aşağıdaki komutu çalıştırın:

    MSBuild /p:SolutionDir="c:\MySolutionDir\";Configuration="MyConfiguration";Platform="Win32" /pp:out.xml MyProject.vcxproj
    

    Bu komut bir "önceden işlenmiş" MSBuild proje dosyası (out.xml) oluşturur. Tanımlandığı yeri görmek için bu dosyada belirli bir özelliği arayabilirsiniz.

Bir özelliğin son tanımı, derlemenin ne tükettiğidir. Özellik iki kez ayarlanırsa, ikinci değer ilk değerin üzerine yazar. Ayrıca, MSBuild projeyi birkaç geçişte değerlendirir:

  • PropertyGroups ve imports
  • ItemDefinitionGroups
  • ItemGroups
  • Hedefler

Bu nedenle, aşağıdaki sıra verilmiştir:

<PropertyGroup>
   <MyProperty>A</MyProperty>
</PropertyGroup>
<ItemGroup>
   <MyItems Include="MyFile.txt"/>
</ItemGroup>
<ItemDefinitionGroup>
  <MyItems>
      <MyMetadata>$(MyProperty)</MyMetadata>
  </MyItems>
</ItemDefinitionGroup>
<PropertyGroup>
   <MyProperty>B</MyProperty>
</PropertyGroup>

Öğesinin MyMetadataMyFile.txt değeri derleme sırasında değerlendirilir B (boş değil ve değil A ).

Artımlı derleme olması gerekenden daha fazlasını oluşturuyor

MSBuild gereksiz yere bir projeyi veya proje öğesini yeniden oluşturuyorsa, ayrıntılı veya ikili derleme günlüğü oluşturun. Günlükte gereksiz yere oluşturulmuş veya derlenmiş dosyayı arayabilirsiniz. Çıktı şuna benzer:

  Task "CL"

  Using cached input dependency table built from:

  F:\test\Project1\Project1\Debug\Project1.tlog\CL.read.1.tlog

  Outputs for F:\TEST\PROJECT1\PROJECT1\PROJECT1.CPP:
  F:\TEST\PROJECT1\PROJECT1\DEBUG\PROJECT1.OBJ
  Project1.cpp will be compiled because F:\TEST\PROJECT1\PROJECT1\PROJECT1.H was modified at 6/5/2019 12:37:09 PM.

  Outputs for F:\TEST\PROJECT1\PROJECT1\PROJECT1.CPP:
  F:\TEST\PROJECT1\PROJECT1\DEBUG\PROJECT1.OBJ

  Write Tracking Logs:
  Debug\Project1.tlog\CL.write.1.tlog

Visual Studio IDE'de oluşturuyorsanız (ayrıntılı çıkış penceresi ayrıntısıyla), Çıkış Penceresi her projenin güncel olmamasının nedenini görüntüler:

1>------ Up-To-Date check: Project: Project1, Configuration: Debug Win32 ------

1>Project is not up-to-date: build input 'f:\test\project1\project1\project1.h' was modified after the last build finished.

Ayrıntılı günlük oluşturma

  1. Visual Studio ana menüsünden Araçlar>Seçenekler>Projeler ve Çözümler>Derleme ve Çalıştırma'ya gidin.

  2. MSBuild proje derleme ayrıntı düzeyini her iki birleşik giriş kutusunda da Ayrıntılı olarak ayarlayın. İlki Çıkış Penceresinde derleme ayrıntı düzeyini, ikincisi ise derleme sırasında her projenin ara dizininde {projectname}.log oluşturulan dosyada derleme ayrıntı düzeyini denetler.

  3. Visual Studio geliştirici komut isteminde, gerçek yolunuzu ve yapılandırma değerlerinizi değiştirerek şu komutlardan birini girin:

    MSBuild /p:Configuration="MyConfiguration";Platform="x86" /fl MySolution.sln
    

    veya

    MSBuild /p:/p:SolutionDir="c:\MySolutionDir\";Configuration="MyConfiguration";Platform="Win32" /fl MyProject.vcxproj
    

    MSBuild'i çalıştırdığınız dizinde bir MSBuild.log dosya oluşturulur.

Araştırma için MSBuild ikili günlükleri sağlama

MSBuild ayrıntılı bir ikili günlük dosyası yakalama özelliğine sahiptir. Derleme sorunu yaşıyorsanız ve ikili günlük sağlayamıyorsanız, günlük sorunu araştırmak için yararlı olabilir.

Ancak, istemeden istediğinizden fazlasını paylaşmadığınızdan emin olmak için ikili günlükte ne tür bilgilerin yakalandığını bilmeniz gerekir. İkili günlük, proje dosyalarınızın ve içeri aktardıkları dosyaların (ve gibi .props.targets) içerikleri, derleme sırasında çalıştırılan tüm görevlerin yanı sıra giriş ve çıkış ile bu MSBuild oturumunda erişilen ortam değişkenleri dahil olmak üzere derlemenizin yaptığı hemen hemen her şeyi yakalar. Genellikle derlenen kaynak dosyaların içeriğini içermez, ancak tam adlarını ve yollarını yakalar.

Not

Bazı derleme ortamları, ortam değişkenlerini kullanarak gizli dizileri kullanılabilir hale getirir. İkili günlük paylaşmadan önce API belirteçlerini veya diğer önemli gizli dizileri kullanıma sunmadığından emin olun.

Komut satırı derlemeleri için ikili günlükleri yakalama

parametresini MSBuild ' e (MSBuild.exe veya dotnet build) geçirerek -bl ikili günlük oluşturabilirsiniz. Oluşturulan .binlog dosyanın içeriğini MSBuild Yapılandırılmış Günlük Görüntüleyicisi'ni kullanarak veya Tarayıcınızda Canlı Yapılandırılmış Günlük Görüntüleyicisi'ni kullanarak inceleyebilirsiniz. MSBuild, tarayıcınızda görüntülenen ikili günlüklerden veri yakalamaz.

Örnekler

dotnet build -bl
dotnet build -bl:SpecificStep.binlog
MSBuild.exe -bl:ServiceRelease.binlog -p:Configuration=Release

Ayrıca bkz. İkili günlükler hakkında daha fazla ayrıntı.

Visual Studio aracılığıyla ikili günlükleri yakalama

Tüm MSBuild çağrılarının günlüklerini yakalamak için:

Yakalanan günlükleri depolamak için '1' ortam değişkenini olarak ayarlayın MSBUILDDEBUGENGINE ve (isteğe bağlı olarak) mevcut bir hedef klasöre ayarlayınMSBUILDDEBUGPATH. Ardından ortamı devralmak için Visual Studio'yu aynı kabuktan başlatın:

SET MSBUILDDEBUGENGINE=1
SET MSBUILDDEBUGPATH=C:\MSBuildReproLogs
devenv.exe MySolution.sln
$env:MSBUILDDEBUGENGINE = 1
$env:MSBUILDDEBUGPATH="C:\MSBuildReproLogs"
& "devenv.exe" MySolution.sln

MSBuild ikili günlükleri daha sonra ortam değişkeni aracılığıyla MSBUILDDEBUGPATH belirtilen bir konuma yakalanır (veya erişim haklarına göre varsayılan olarak MSBuild_Logs geçerli bir klasörün veya %temp%öğesinin alt klasörü olarak kullanılır).

Not

Günlükler her MSBuild çağrısı (tasarım zamanı derlemeleri dahil) için kaydedilir ve eskilerini kaldırmadan klasörde tutulur; böylece günlük dosyalarının sayısı hızla artabilir. Kabul ortam değişkeninin yalnızca sorunun yeniden üretilmesi için kısa bir süre için ayarlanması önerilir (ancak bazı belirsiz sorunların birden çok yeniden oluşturma girişimine ihtiyaç duyabileceği anlaşılabilir).

Project System Tools uzantısını kullanarak ikili MSBuild günlüğü oluşturma

Visual Studio aracılığıyla binlogları yakalamak için Project System Tools deposundaki bu kılavuza bakın.

  1. Project System Tools uzantısını indirin ve yükleyin.

  2. Uzantı yüklendikten sonra, Diğer Windows'u Görüntüle>menüsünde bazı yeni öğeler görünür.

    Other Windows menu

  3. Visual Studio'da Derleme Günlüğü penceresini göstermek için Diğer Windows>Derleme Günlüğünü Görüntüle'yi>seçin. Proje sisteminde hem normal hem de tasarım zamanı derlemelerini kaydetmeye başlamak için ilk araç çubuğu simgesini seçin.

    Build logging window

  4. Bir derleme kaydedildikten sonra Derleme Günlüğü penceresinde görüntülenir. Öğeye sağ tıklayın ve bağlam menüsünde Günlükleri Kaydet'i seçerek dosyanızı .binlog kaydedin.

    Build logging context menu

MSBuild Yapılandırılmış Günlük Görüntüleyicisi.’ni kullanarak .binlog dosyalarınızı görüntüleyebilir ve arayabilirsiniz.