Bagikan melalui


Tugas MSBuild

Membangun proyek MSBuild dari proyek MSBuild lain.

Parameter

Tabel berikut ini menjelaskan parameter tugas MSBuild.

Parameter Deskripsi
BuildInParallel Parameter Boolean opsional.

Jika true, proyek yang ditentukan dalam parameter Projects dibangun secara paralel jika memungkinkan. Defaultnya adalah false.
Projects Parameter ITaskItem[] wajib.

Menentukan file proyek yang akan dibangun.
Properties Parameter String opsional.

Daftar pasangan nama/nilai properti yang dibatasi titik koma untuk diterapkan sebagai properti global ke proyek turunan. Ketika Anda menentukan parameter ini, secara fungsional ini setara dengan mengatur properti yang memiliki sakelar -property saat Anda membangun dengan MSBuild.exe. Contohnya:

Properties="Configuration=Debug;Optimize=$(Optimize)"

Saat Anda meneruskan properti ke proyek melalui parameter Properties, MSBuild mungkin membuat instans baru proyek meskipun file proyek tersebut telah dimuat. MSBuild membuat satu instans proyek untuk jalur proyek tertentu dan set properti global yang unik. Misalnya, perilaku ini memungkinkan Anda membuat beberapa tugas MSBuild yang memanggil myproject.proj, dengan Configuration=Release dan Anda mendapatkan instans myproject.proj tunggal (jika tidak ada properti unik yang ditentukan dalam tugas). Jika Anda menentukan properti yang belum dilihat oleh MSBuild, MSBuild membuat instans baru proyek, yang dapat dibangun secara paralel ke instans proyek lainnya. Misalnya, konfigurasi Rilis dapat dibangun pada saat yang sama dengan konfigurasi Debug.
RebaseOutputs Parameter Boolean opsional.

Jika true, jalur relatif item output target dari proyek yang dibangun memiliki jalur yang disesuaikan agar relatif terhadap proyek yang memanggil. Defaultnya adalah false.
RemoveProperties Parameter String opsional.

Menentukan set properti global yang akan dihapus.
RunEachTargetSeparately Parameter Boolean opsional.

Jika true, tugas MSBuild memanggil setiap target dalam daftar yang diteruskan ke MSBuild satu per satu, alih-alih secara bersamaan. Mengatur parameter ini ke true menjamin bahwa target berikutnya dipanggil bahkan jika target yang dipanggil sebelumnya gagal. Jika tidak, kesalahan build akan menghentikan pemanggilan semua target berikutnya. Defaultnya adalah false.
SkipNonexistentProjects Parameter Boolean opsional.

Jika true, file proyek yang tidak ada pada disk akan dilompati. Jika tidak, proyek tersebut akan menyebabkan kesalahan. Default ke false.
SkipNonexistentTargets Parameter Boolean opsional.

Jika true, file proyek yang ada tetapi tidak berisi Targets bernama akan dilompati. Jika tidak, proyek tersebut akan menyebabkan kesalahan. Default ke false. Diperkenalkan di MSBuild 15.5.
StopOnFirstFailure Parameter Boolean opsional.

Jika true, ketika salah satu proyek gagal dibangun, tidak ada lagi proyek yang akan dibangun. Ini tidak didukung ketika membangun secara paralel untuk saat ini (dengan beberapa prosesor).
TargetAndPropertyListSeparators Parameter String[] opsional.

Menentukan daftar target dan properti sebagai metadata item Project). Pemisah akan bersifat un-escaped sebelum pemrosesan. misalnya, %3B (escaped ';') akan diperlakukan seolah-olah un-escaped ';'.
TargetOutputs Opsional ITaskItem[] parameter output hanya-baca.

Mengembalikan output dari target yang dibangun dari semua file proyek. Hanya output dari target yang ditentukan yang dikembalikan, bukan output apa pun yang mungkin ada pada target yang diandalkan oleh target tersebut.

Parameter TargetOutputs juga berisi metadata berikut:

- MSBuildSourceProjectFile: File proyek MSBuild yang berisi target yang mengatur output.
- MSBuildSourceTargetName: Target yang mengatur output. Catatan: Jika Anda ingin mengidentifikasi output dari setiap file atau target proyek secara terpisah, jalankan tugas MSBuild secara terpisah untuk setiap file atau target proyek. Jika Anda menjalankan tugas MSBuild hanya satu kali untuk membangun semua file proyek, output dari semua target dikumpulkan ke dalam satu array.
Targets Parameter String opsional.

Menentukan target yang akan dibangun dalam file proyek. Gunakan titik koma untuk memisahkan daftar nama target. Jika tidak ada target yang ditentukan dalam tugas MSBuild, target default yang ditentukan dalam file proyek akan dibangun. Catatan: Target harus terjadi di semua file proyek. Jika tidak, kesalahan build terjadi.
ToolsVersion Parameter String opsional.

Menentukan ToolsVersion untuk digunakan saat membangun proyek yang diteruskan ke tugas ini.

Memungkinkan tugas MSBuild untuk membangun proyek yang menargetkan versi .NET Framework yang berbeda dari yang ditentukan di dalam proyek. Nilai yang valid adalah 2.0, 3.0, dan 3.5. Nilai default 3.5.

Keterangan

Selain parameter yang tercantum di atas, tugas ini mewarisi parameter dari kelas TaskExtension, yang mewarisi sendiri dari kelas Task. Untuk daftar parameter tambahan ini dan deskripsinya, lihat kelas dasar TaskExtension.

Tidak seperti menggunakan tugas Exec untuk memulai MSBuild.exe, tugas ini menggunakan proses MSBuild yang sama untuk membangun proyek turunan. Daftar target yang sudah dibangun yang dapat dilompati dibagikan di antara build induk dan turunan. Tugas ini juga lebih cepat karena tidak ada proses MSBuild baru yang dibuat.

Tugas ini tidak hanya dapat memproses file proyek, tetapi juga file solusi.

Konfigurasi apa pun yang diperlukan oleh MSBuild untuk memungkinkan proyek dibangun secara bersamaan, bahkan jika konfigurasi tersebut melibatkan infrastruktur jarak jauh (misalnya, port, protokol, batas waktu, percobaan ulang, dan sebagainya), harus diatur menjadi dapat dikonfigurasi menggunakan file konfigurasi. Jika memungkinkan, item konfigurasi harus dapat ditentukan sebagai parameter tugas pada tugas MSBuild.

Mulai dari MSBuild 3.5, proyek Solusi sekarang menampilkan TargetOutputs dari semua sub-proyek yang dibangun.

Meneruskan properti ke proyek

Dalam versi MSBuild sebelum MSBuild 3.5, meneruskan set properti yang berbeda ke berbagai proyek yang tercantum dalam item MSBuild sangat menantang. Jika Anda menggunakan atribut Properti dari tugas MSBuild, maka pengaturannya diterapkan ke semua proyek yang sedang dibangun kecuali Anda membuat batch tugas MSBuild dan secara kondisional menyediakan properti yang berbeda untuk setiap proyek dalam daftar item.

Namun, MSBuild 3.5 menyediakan dua item metadata cadangan baru, Properties dan AdditionalProperties, yang memberi Anda cara fleksibel untuk meneruskan properti yang berbeda untuk berbagai proyek yang dibangun menggunakan tugas MSBuild.

Catatan

Item metadata baru ini hanya berlaku untuk item yang diteruskan dalam atribut Projects dari tugas MSBuild.

Keuntungan build multi-prosesor

Salah satu keuntungan utama menggunakan metadata baru ini terjadi ketika Anda membangun proyek secara paralel pada sistem multi-prosesor. Metadata tersebut memungkinkan Anda mengonsolidasikan semua proyek ke dalam panggilan tugas MSBuild tunggal tanpa harus melakukan tugas batching atau kondisional MSBuild. Dan ketika Anda hanya memanggil satu tugas MSBuild, semua proyek yang tercantum dalam atribut Projects akan dibangun secara paralel. (Namun, hanya jika atribut BuildInParallel=true ada dalam tugas MSBuild.) Untuk informasi selengkapnya, lihat Membangun beberapa proyek secara paralel.

Metadata properti

Ketika ditentukan, metadata Properti mengambil alih parameter Properti tugas, sementara metadata AdditionalProperties ditambahkan ke definisi parameter.

Skenario umum adalah ketika Anda membangun beberapa file solusi menggunakan tugas MSBuild, hanya menggunakan konfigurasi build yang berbeda. Anda mungkin ingin membangun solusi a1 menggunakan konfigurasi Debug dan solusi a2 menggunakan konfigurasi Rilis. Di MSBuild 2.0, file proyek ini akan tampak seperti berikut ini:

Catatan

Dalam contoh berikut, "..." mewakili file solusi tambahan.

a.proj

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="Build">
        <MSBuild Projects="a1.sln..." Properties="Configuration=Debug"/>
        <MSBuild Projects="a2.sln" Properties="Configuration=Release"/>
    </Target>
</Project>

Namun, dengan menggunakan metadata Properti, Anda dapat menyederhanakan ini untuk menggunakan tugas MSBuild tunggal, seperti yang diperlihatkan berikut ini:

a.proj

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <ItemGroup>
        <ProjectToBuild Include="a1.sln...">
            <Properties>Configuration=Debug</Properties>
        </ProjectToBuild>
        <ProjectToBuild Include="a2.sln">
            <Properties>Configuration=Release</Properties>
        </ProjectToBuild>
    </ItemGroup>
    <Target Name="Build">
        <MSBuild Projects="@(ProjectToBuild)"/>
    </Target>
</Project>

- atau -

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <ItemGroup>
        <ProjectToBuild Include="a1.sln..."/>
        <ProjectToBuild Include="a2.sln">
            <Properties>Configuration=Release</Properties>
        </ProjectToBuild>
    </ItemGroup>
    <Target Name="Build">
        <MSBuild Projects="@(ProjectToBuild)"
          Properties="Configuration=Debug"/>
    </Target>
</Project>

Metadata AdditionalProperties

Pertimbangkan skenario berikut di mana Anda membangun dua file solusi menggunakan tugas MSBuild, keduanya menggunakan konfigurasi Rilis, tetapi yang satu menggunakan arsitektur x86 dan yang satunya lagi menggunakan arsitektur ia64. Di MSBuild 2.0, Anda harus membuat beberapa instans tugas MSBuild: satu untuk membangun proyek menggunakan konfigurasi Rilis dengan Arsitektur x86, yang satu lagi menggunakan konfigurasi Rilis dengan arsitektur ia64. File proyek Anda akan tampak seperti berikut:

a.proj

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="Build">
        <MSBuild Projects="a1.sln..." Properties="Configuration=Release;
          Architecture=x86"/>
        <MSBuild Projects="a2.sln" Properties="Configuration=Release;
          Architecture=ia64"/>
    </Target>
</Project>

Dengan menggunakan metadata AdditionalProperties, Anda dapat menyederhanakan ini untuk menggunakan tugas MSBuild tunggal menggunakan yang berikut ini:

a.proj

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <ItemGroup>
        <ProjectToBuild Include="a1.sln...">
            <AdditionalProperties>Architecture=x86
              </AdditionalProperties>
        </ProjectToBuild>
        <ProjectToBuild Include="a2.sln">
            <AdditionalProperties>Architecture=ia64
              </AdditionalProperties>
        </ProjectToBuild>
    </ItemGroup>
    <Target Name="Build">
        <MSBuild Projects="@(ProjectToBuild)"
          Properties="Configuration=Release"/>
    </Target>
</Project>

Contoh

Contoh berikut menggunakan tugas MSBuild untuk membangun proyek yang ditentukan oleh koleksi item ProjectReferences. Output target yang dihasilkan disimpan dalam koleksi item AssembliesBuiltByChildProjects.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <ItemGroup>
        <ProjectReferences Include="*.*proj" />
    </ItemGroup>

    <Target Name="BuildOtherProjects">
        <MSBuild
            Projects="@(ProjectReferences)"
            Targets="Build">
            <Output
                TaskParameter="TargetOutputs"
                ItemName="AssembliesBuiltByChildProjects" />
        </MSBuild>
    </Target>

</Project>

Baca juga