WriteCodeFragment görevi

Belirtilen oluşturulan kod parçasından geçici bir kod dosyası oluşturur. Dosyayı silmez.

Parametreler

Aşağıdaki tabloda görevin parametreleri WriteCodeFragment açıklanmaktadır.

Parametre Açıklama
AssemblyAttributes İsteğe bağlı ITaskItem[] parametre.

Yazacak özniteliklerin açıklaması. Öğe Include değeri özniteliğin tam tür adıdır, örneğin, System.AssemblyVersionAttribute.

Her meta veri, bir parametrenin ad-değer çiftidir. Parametrelerin MSBuild 17.6 ve önceki sürümlerinde türünde String olduğu varsayılır, ancak MSBuild 17.7 ve sonraki sürümlerinde, öğesinin parçası mscorlibolan dışındaki String türleri de kullanabilirsiniz. Örneğin ve false Boole değerlerini, tamsayıları, sabit toplamlarını ve kayan nokta türlerini kullanabilirsiniztrue. Tür, söz diziminden otomatik olarak çıkarılır. içinde mscorlibolmayan bir tür için, biçiminde {parameter}_TypeNamemeta veri değerleri sağlayarak parametresinin türünü belirtin.

Bazı öznitelikler yalnızca konumsal oluşturucu bağımsız değişkenlerine izin verir. Ancak, bu tür bağımsız değişkenleri herhangi bir öznitelikte kullanabilirsiniz. Konumsal oluşturucu özniteliklerini ayarlamak için , _Parameter2ve benzeri meta veri adlarını _Parameter1kullanın. Parametre dizini atlanamaz.

MSBuild 17.7 veya sonraki sürümlerinde, göreve parametre değeri metnini olduğu gibi, tırnak işaretleri olmadan yorumlamasını bildirmek için formun {parameter}_IsLiteral meta verilerini de belirtebilirsiniz (dize değerleri için varsayılan durumda olduğu gibi).
Language Gerekli String parametresi.

Oluşturulacak kodun dilini belirtir.

Language CodeDom sağlayıcısının kullanılabildiği herhangi bir dil olabilir; örneğin, "C#" veya "VisualBasic." Yayılan dosya, bu dil için varsayılan dosya adı uzantısına sahip olur.
OutputDirectory İsteğe bağlı ITaskItem parametre.

Oluşturulan kod için hedef klasörü( genellikle ara klasör) belirtir.
OutputFile İsteğe bağlı ITaskItem çıkış parametresi.

Oluşturulan dosyanın yolunu belirtir. Bu parametre bir dosya adı kullanılarak ayarlanırsa, hedef klasör dosya adına eklenir. Kök kullanılarak ayarlanırsa hedef klasör yoksayılır.

Bu parametre ayarlı değilse, çıkış dosyası adı hedef klasör, rastgele bir dosya adı ve belirtilen dil için varsayılan dosya adı uzantısıdır.

Açıklamalar

Tabloda listelenen parametrelerin bulunmasına ek olarak, bu görev kendi sınıfından TaskExtension devralan sınıfından Task parametreleri devralır. Bu ek parametrelerin ve açıklamalarının listesi için bkz . TaskExtension temel sınıfı.

Bu görev normalde doğrudan kullanıcı kodunda kullanılmaz.

Derleme düzeyinde öznitelikler oluşturma

MSBuild 17.7 ve sonraki sürümlerde bu görev, derleme düzeyi öznitelikler için daha çeşitli parametre türlerini destekleyecek şekilde güncelleştirildi. MSBuild 17.6 ve öncesi yalnızca String derleme düzeyi öznitelikler için parametre türü olarak desteklenir. MSBuild 17.7 ve sonraki sürümleriyle, MSBuild'in önceki sürümlerinde olduğu gibi, yalnızca parametreleri dize türü olanlar değil, herhangi bir .NET derleme özniteliği oluşturabilirsiniz.

Örneğin, Boole parametresi kullanan derleme düzeyi özniteliğini CLSCompliant(true)tanımlamak için aşağıdaki söz dizimini kullanabilirsiniz:

<ItemGroup>
    <AssemblyAttribute Include="System.CLSCompliantAttribute">
        <_Parameter1>true</_Parameter1>
    </AssemblyAttribute>
</ItemGroup>

Oluşturulan kod hedef dile bağlıdır. C# için aşağıdaki gibi olacaktır:

[assembly: System.CLSCompliantAttribute(true)]

içinde mscorlib tanımlanan türler, önceki örnekteki Boole gibi otomatik olarak çıkarılır. Çıkarılmayan türleri belirtmek için formun {parameter}_TypeName meta verilerini tanımlayabilirsiniz.

<ItemGroup>
    <AssemblyAttribute Include="Microsoft.Owin.OwinStartup">
        <_Parameter1>Microsoft.Examples.Startup</_Parameter1>
        <_Parameter1_TypeName>System.Type</_Parameter1_TypeName>
    </AssemblyAttribute>
</ItemGroup>

C# dilinde oluşturulan kod aşağıdaki gibidir:

[assembly: Microsoft.Owin.OwinStartup(typeof(Microsoft.Examples.Startup))]

Daha karmaşık parametre değerleri için kullanabilirsiniz {parameter}_IsLiteral.

<ItemGroup>
    <AssemblyAttribute Include="NUnit.Framework.Parallelizable">
        <_Parameter1>NUnit.Framework.ParallelScope.Fixtures</_Parameter1>
        <_Parameter1_IsLiteral>true</_Parameter1_IsLiteral>
    </AssemblyAttribute>
</ItemGroup>

Önceki örnek, C# dilinde aşağıdaki derleme özniteliğini oluşturur:

[assembly: NUnit.Framework.Parallelizable(NUnit.Framework.ParallelScope.Fixtures)]

Normalde projenin dilindeki bir öznitelik bildiriminde izin verilen herhangi bir söz dizimini kullanabilirsiniz. Dizi parametresi için aşağıdaki gibi bir kod kullanabilirsiniz:

<ItemGroup>
  <AssemblyAttribute Include="TestAttribute">
    <_Parameter1>new int[] { 1, 3, 5 } /* odd numbers */</_Parameter1>
    <_Parameter1_IsLiteral>true</_Parameter1_IsLiteral>
  </AssemblyAttribute>
</ItemGroup>

kullandığınızda IsLiteralsöz dizimi uygun derleyici tarafından yorumlanır ve bu nedenle dile özgüdür. Birden fazla dilin aynı MSBuild içeri aktarma dosyalarını ve/veya proje dosyalarını paylaştığı durumlarınız varsa, kodun ilgili projeye özgü dille derlendiğinden emin olmak için koşullu söz dizimi kullanmanız gerekebilir.

Not

Bu bölümde (_TypeName ve _IsLiteral sonekleri) açıklanan söz dizimi F# dilinde desteklenmez.

Örnek

Görev için WriteCodeFragment tipik bir kullanım örneği, derleme düzeyi özniteliğini tanımlayan ve bunu derlemeye ekleyen bir dosya oluşturan bir hedeftedir. AssemblyAttribute tanımlı olarak, aşağıdaki kodda WriteCodeFragment olduğu gibi görevi çağırabilirsiniz.

<Target Name="AddAssemblyVersion" BeforeTargets="Build">
  <ItemGroup>
     <AssemblyAttribute Include="AssemblyVersion">
       <_Parameter1>1.2.3.4</_Parameter1>
     </AssemblyAttribute>
  </ItemGroup>
  <WriteCodeFragment AssemblyAttributes="@(AssemblyAttribute)"
                     Language="C#"
                     OutputDirectory="$(IntermediateOutputPath)"
                     OutputFile="AssemblyVersion.cs">
    <Output TaskParameter="OutputFile" ItemName="Compile" />
    <Output TaskParameter="OutputFile" ItemName="FileWrites" />
  </WriteCodeFragment>
</Target>

OutputFile belirli bir dosya adı verilir; belirtilmezse, rastgele bir dosya adı oluşturulur. Ayrıca, oluşturulan dosyayı derlemeye eklemek için öğe Compile listesi çıkış olarak verilir. Dosya, hedef çalıştırıldığında Clean silinecek şekilde öğe listesine de eklenirFileWrites.

Ayrıca bkz.