Bagikan melalui


Tugas WriteCodeFragment

Menghasilkan file kode sementara dari fragmen kode yang dihasilkan yang ditentukan. Tidak menghapus file.

Parameter

Tabel berikut ini menjelaskan parameter tugas WriteCodeFragment.

Parameter Deskripsi
AssemblyAttributes Parameter ITaskItem[] opsional.

Deskripsi atribut yang akan ditulis. Nilai item Include adalah nama jenis lengkap atribut, misalnya, System.AssemblyVersionAttribute.

Setiap metadata adalah pasangan nilai nama parameter. Parameter diasumsikan berjenis String MSBuild 17.6 dan yang lebih lama, tetapi di MSBuild 17.7 dan yang lebih baru, Anda juga dapat menggunakan jenis selain String yang merupakan bagian mscorlibdari . Misalnya, Anda dapat menggunakan true dan false nilai Boolean, bilangan bulat, enum, dan jenis titik mengambang. Jenis secara otomatis disimpulkan dari sintaks. Untuk jenis yang tidak ada di mscorlib, tentukan jenis untuk parameter dengan menyediakan nilai metadata dalam formulir {parameter}_TypeName.

Beberapa atribut hanya mengizinkan argumen konstruktor posisional. Namun, Anda dapat menggunakan argumen seperti itu dalam atribut apa pun. Untuk mengatur atribut konstruktor posisional, gunakan nama metadata yang menyerupai _Parameter1, , _Parameter2dan sebagainya. Indeks parameter tidak dapat dilewati.

Di MSBuild 17.7 atau yang lebih baru, Anda juga dapat menentukan metadata formulir {parameter}_IsLiteral untuk menginstruksikan tugas untuk menginterpretasikan teks nilai parameter apa adanya, tanpa di sekitarnya dengan tanda kutip (seperti yang dilakukan dalam kasus default untuk nilai string).
Language Parameter String wajib.

Menentukan bahasa kode yang akan dihasilkan.

Language dapat berupa bahasa apa pun di mana penyedia CodeDom tersedia, misalnya, "C#" atau "VisualBasic." File yang dipancarkan akan memiliki ekstensi nama file default untuk bahasa tersebut.
OutputDirectory Parameter ITaskItem opsional.

Menentukan folder tujuan untuk kode yang dihasilkan, biasanya folder perantara.
OutputFile Parameter output ITaskItem opsional.

Menentukan jalur file yang dihasilkan. Jika parameter ini diatur dengan menggunakan nama file, folder tujuan ditambahkan ke nama file. Jika diatur dengan menggunakan akar, folder tujuan diabaikan.

Jika parameter ini tidak diatur, nama file output adalah folder tujuan, nama file arbitrer, dan ekstensi nama file default untuk bahasa yang ditentukan.

Keterangan

Selain memiliki parameter yang tercantum dalam tabel, tugas ini mewarisi parameter dari kelas TaskExtension, yang mewarisi dari kelas Task. Untuk daftar parameter tambahan ini dan deskripsinya, lihat kelas dasar TaskExtension.

Tugas ini biasanya tidak digunakan langsung dalam kode pengguna.

Membuat atribut tingkat perakitan

Di MSBuild 17.7 dan yang lebih baru, tugas ini diperbarui untuk mendukung berbagai jenis parameter yang lebih besar untuk atribut tingkat perakitan. MSBuild 17.6 dan yang lebih lama hanya String didukung sebagai jenis parameter untuk atribut tingkat perakitan. Dengan MSBuild 17.7 dan yang lebih baru, Anda dapat membuat atribut rakitan .NET apa pun, tidak hanya yang parameternya adalah jenis string, seperti pada versi MSBuild sebelumnya.

Misalnya, untuk menentukan atribut CLSCompliant(true)tingkat rakitan , yang menggunakan parameter Boolean, Anda dapat menggunakan sintaks berikut:

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

Kode yang dihasilkan tergantung pada bahasa target. Untuk C#, ini adalah sebagai berikut:

[assembly: System.CLSCompliantAttribute(true)]

Jenis yang ditentukan secara otomatis disimpulkan mscorlib , seperti Boolean dalam contoh sebelumnya. Anda dapat menentukan metadata formulir {parameter}_TypeName untuk menentukan jenis yang tidak dapat disimpulkan.

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

Kode yang dihasilkan dalam C# adalah sebagai berikut:

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

Untuk nilai parameter yang lebih rumit, Anda dapat menggunakan {parameter}_IsLiteral.

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

Contoh sebelumnya menghasilkan atribut assembly berikut di C#:

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

Anda dapat menggunakan sintaks apa pun yang biasanya diizinkan dalam deklarasi atribut dalam bahasa proyek. Untuk parameter array, Anda dapat menggunakan kode seperti berikut:

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

Saat Anda menggunakan IsLiteral, sintaks ditafsirkan oleh pengkompilasi yang sesuai, dan oleh karena itu spesifik bahasa. Jika Anda memiliki situasi di mana lebih dari satu bahasa berbagi file impor MSBuild dan/atau file proyek yang sama, Anda mungkin perlu menggunakan sintaks bersyarat untuk memastikan kode dikompilasi dengan bahasa khusus proyek yang relevan.

Catatan

Sintaks yang dijelaskan di bagian ini (_TypeName dan _IsLiteral akhiran) tidak didukung di F#.

Contoh

Kasus penggunaan umum untuk WriteCodeFragment tugas berada dalam target yang menghasilkan file yang menentukan atribut tingkat perakitan dan menambahkannya ke build. Dengan AssemblyAttribute ditentukan, Anda dapat memanggil WriteCodeFragment tugas seperti dalam kode berikut.

<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 diberikan nama file tertentu; jika tidak ditentukan, nama file dibuat secara acak. Selain itu, untuk menambahkan file yang dihasilkan ke build, Compile daftar item diberikan sebagai output. File juga ditambahkan ke FileWrites daftar item, sehingga dihapus saat Clean target dijalankan.

Lihat juga