Aracılığıyla paylaş


Oluşturulan dosyaları işlemek için derlemeyi özelleştirme

Belirli bir derlemede, derleme sırasında oluşturulan dosyalar statik dosyalardan (kaynak dosyalar gibi) farklı davranır. Bu nedenle, MSBuild'in Projeleri Nasıl Derlediğinden anlamak önemlidir. İki aşama değerlendirme aşaması ve yürütme aşamasıdır. Değerlendirme aşamasında MSBuild projenizi okur, her şeyi içeri aktarır, özellikler oluşturur, öğeler için glob'ları genişletir ve derleme işlemini ayarlar. Yürütme aşamasında MSBuild, değerlendirme aşamasında ayrıştırdığı verilerle hedefleri ve görevleri çalıştırarak derlemeyi gerçekleştirir.

Yürütme sırasında oluşturulan dosyalar değerlendirme aşamasında mevcut olmadığından derleme işlemine dahil değildir. Bu sorunu çözmek için, oluşturulan dosyaları derleme işlemine el ile eklemeniz gerekir. Bunu yapmak için önerilen yol, aşağıdaki örnekte olduğu gibi yeni dosyayı Content hedefteki veya None öğelerine BeforeBuild eklemektir:

<Target Name="MyTarget" BeforeTargets="BeforeBuild">
  
  <!-- Some logic that generates your file goes here -->
  <!-- Generated files should be placed in $(IntermediateOutputPath) -->

  <ItemGroup>
    <!-- If your generated file was placed in `obj\` -->
    <None Include="$(IntermediateOutputPath)my-generated-file.xyz" CopyToOutputDirectory="PreserveNewest"/>
    <!-- If you know exactly where that file is going to be, you can hard code the path. -->
    <None Include="some\specific\path\my-generated-file.xyz" CopyToOutputDirectory="PreserveNewest"/>
    
    <!-- If you want to capture "all files of a certain type", you can glob like so. -->
    <None Include="some\specific\path\*.xyz" CopyToOutputDirectory="PreserveNewest"/>
    <None Include="some\specific\path\*.*" CopyToOutputDirectory="PreserveNewest"/>
  </ItemGroup>
</Target>

Oluşturulan dosyanızı veya Content öğesine None eklemek, derleme işleminin dosyayı görmesi için yeterlidir. Ayrıca doğru zamanda eklendiğinden de emin olmak istiyorsunuz. İdeal olarak, hedefiniz öncesinde BeforeBuildçalışır. AssignTargetPathsbir diğer olası hedeftir, bu da yeni öğelere dönüştürülmeden önce ve Content öğeleri (diğerlerinin yanı sıra) değiştirmenin None son fırsatıdır. Bkz. Ortak Öğe Türleri.