Bagikan melalui


Menggunakan target yang sama dalam beberapa file proyek

Jika Anda telah menulis beberapa file proyek MSBuild, Anda mungkin telah menemukan bahwa Anda perlu menggunakan tugas dan target yang sama dalam file proyek yang berbeda. Alih-alih menyertakan deskripsi lengkap tugas atau target tersebut di setiap file proyek, Anda dapat menyimpan target dalam file proyek terpisah lalu mengimpor proyek tersebut ke proyek lain yang perlu menggunakan target.

Menggunakan elemen Impor

Elemen Import ini digunakan untuk menyisipkan satu file proyek ke dalam file proyek lain. File proyek yang sedang diimpor harus berupa file proyek MSBuild yang valid dan berisi XML yang terbentuk dengan baik. Atribut Project menentukan jalur ke file proyek yang diimpor. Untuk informasi selengkapnya tentang elemen Import, lihat Mengimpor elemen (MSBuild).

Untuk mengimpor proyek

  1. Tentukan, dalam file proyek impor, semua properti dan item yang digunakan sebagai parameter untuk properti dan item dalam proyek yang diimpor.

  2. Gunakan elemen Import untuk mengimpor proyek. Contohnya:

    <Import Project="MyCommon.targets"/>

  3. Mengikuti elemen Import, tentukan semua properti dan item yang harus mengganti definisi default properti dan item dalam proyek yang diimpor.

Urutan evaluasi

Ketika MSBuild mencapai elemen Import, proyek yang diimpor secara efektif dimasukkan ke dalam proyek impor di lokasi elemen Import. Oleh karena itu, lokasi elemen Import dapat memengaruhi nilai properti dan item. Penting untuk memahami properti dan item yang ditetapkan oleh proyek yang diimpor, serta properti dan item yang digunakan proyek yang diimpor.

Saat proyek dibangun, semua properti dievaluasi terlebih dahulu, diikuti oleh item. Misalnya, XML berikut menentukan file proyek yang diimpor MyCommon.targets:

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

    <Target Name="Go">
        <Message Text="Name=$(Name)"/>
    </Target>
</Project>

XML berikut mendefinisikan MyApp.proj, yang mengimpor MyCommon.targets:

<Project
    DefaultTargets="Go"
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <Name>MyApp</Name>
    </PropertyGroup>
    <Import Project="MyCommon.targets"/>
</Project>

Ketika proyek mengompilasi, pesan berikut akan ditampilkan:

Name="MyCommon"

Karena proyek diimpor setelah properti Name ditentukan di MyApp.proj, definisi Name di MyCommon.targets mengambil alih definisi di MyApp.proj. Jika proyek diimpor sebelum nama properti ditentukan, build akan menampilkan pesan berikut:

Name="MyApp"

Menggunakan pendekatan berikut saat mengimpor proyek

  1. Tentukan, dalam file proyek, semua properti dan item yang digunakan sebagai parameter untuk properti dan item dalam proyek yang diimpor.

  2. Impor proyek.

  3. Tentukan dalam file proyek semua properti dan item yang harus mengganti definisi default properti dan item dalam proyek yang diimpor.

Contoh 1

Contoh kode berikut menunjukkan file MyCommon.targets yang diimpor contoh kode kedua. File .targets mengevaluasi properti dari proyek impor untuk mengonfigurasi build.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <Flavor Condition="'$(Flavor)'==''">DEBUG</Flavor>
        <Optimize Condition="'$(Flavor)'=='RETAIL'">yes</Optimize>
        <appname>$(MSBuildProjectName)</appname>
    <PropertyGroup>
    <Target Name="Build">
        <Csc Sources="hello.cs"
            Optimize="$(Optimize)"
            OutputAssembly="$(appname).exe"/>
    </Target>
</Project>

Contoh 2

Contoh kode berikut mengimpor file MyCommon.targets.

<Project DefaultTargets="Build"
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <Flavor>RETAIL</Flavor>
    </PropertyGroup>
    <Import Project="MyCommon.targets"/>
</Project>