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 mscorlib dari . 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 , , _Parameter2 dan 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.