Bagaimana file manifes sumber daya diberi nama

Ketika MSBuild mengkompilasi proyek .NET Core, file sumber daya XML, yang memiliki ekstensi file .resx , dikonversi menjadi file .resources biner. File biner disematkan ke dalam output pengkompilasi dan dapat dibaca oleh ResourceManager. Artikel ini menjelaskan bagaimana MSBuild memilih nama untuk setiap file .resources .

Petunjuk / Saran

Jika Anda secara eksplisit menambahkan item sumber daya ke file proyek Anda, dan itu juga termasuk dalam pola penyertaan default untuk .NET Core, Anda akan mendapatkan kesalahan build. Untuk menyertakan file sumber daya secara manual sebagai EmbeddedResource item, atur properti EnableDefaultEmbeddedResourceItems ke false.

Nama default

Di .NET Core 3.0 dan yang lebih baru, nama default untuk manifes sumber daya digunakan saat kedua kondisi berikut terpenuhi:

  • File sumber daya tidak secara eksplisit disertakan dalam file proyek sebagai EmbeddedResource item dengan LogicalName, , ManifestResourceNameatau DependentUpon metadata.
  • Properti EmbeddedResourceUseDependentUponConvention tidak diatur ke false dalam file proyek. Secara default, properti ini diatur ke true. Untuk informasi selengkapnya, lihat EmbeddedResourceUseDependentUponConvention.

Jika file aset ditempatkan bersama dengan file sumber (.cs atau .vb) yang memiliki nama file dasar yang sama, nama lengkap tipe pertama yang didefinisikan dalam file sumber digunakan untuk nama file manifes. Misalnya, jika MyNamespace.Form1 adalah jenis pertama yang ditentukan dalam Form1.cs, dan Form1.cs dikolokasikan dengan Form1.resx, nama manifes yang dihasilkan untuk file sumber daya tersebut adalah MyNamespace.Form1.resources.

LogicalName Metadata

Jika file sumber daya secara eksplisit disertakan dalam file proyek sebagai EmbeddedResource item dengan LogicalName metadata, LogicalName nilai tersebut digunakan sebagai nama manifes. LogicalName lebih diutamakan daripada metadata atau pengaturan lainnya.

Misalnya, nama manifes untuk file sumber daya yang ditentukan dalam cuplikan file proyek berikut adalah SomeName.resources.

<EmbeddedResource Include="X.resx" LogicalName="SomeName.resources" />

-atau-

<EmbeddedResource Include="X.fr-FR.resx" LogicalName="SomeName.resources" />

Nota

  • Jika LogicalName tidak ditentukan, EmbeddedResource dengan dua titik (.) dalam nama file tidak berfungsi, yang berarti tidak GetManifestResourceNames mengembalikan file tersebut.

    Contoh berikut berfungsi dengan benar:

    <EmbeddedResource Include="X.resx" />
    

    Contoh berikut tidak berfungsi:

    <EmbeddedResource Include="X.fr-FR.resx" />
    

Metadata ManifestResourceName

Jika file sumber daya secara eksplisit disertakan dalam file proyek sebagai item EmbeddedResource dengan metadata ManifestResourceName (dan LogicalName tidak ada), nilai ManifestResourceName, dikombinasikan dengan ekstensi file .resources, digunakan sebagai nama file manifes.

Misalnya, nama manifes untuk file sumber daya yang ditentukan dalam cuplikan file proyek berikut adalah SomeName.resources.

<EmbeddedResource Include="X.resx" ManifestResourceName="SomeName" />

Nama manifes untuk file sumber daya yang ditentukan dalam cuplikan file proyek berikut adalah SomeName.fr-FR.resources.

<EmbeddedResource Include="X.fr-FR.resx" ManifestResourceName="SomeName.fr-FR" />

Metadata Tergantung Pada

Jika file sumber daya secara eksplisit disertakan dalam file proyek sebagai EmbeddedResource item dengan DependentUpon metadata (dan LogicalName dan ManifestResourceName tidak ada), informasi dari file sumber yang ditentukan oleh DependentUpon digunakan untuk nama file manifes sumber daya. Secara khusus, nama jenis pertama yang ditentukan dalam file sumber digunakan dalam nama manifes sebagai berikut: Namespace.Classname[. Budaya].sumber daya.

Misalnya, nama manifes untuk file sumber daya yang ditentukan dalam cuplikan file proyek berikut adalah Namespace.Classname.resources (di mana Namespace.Classname adalah kelas pertama yang ditentukan dalam MyTypes.cs).

<EmbeddedResource Include="X.resx" DependentUpon="MyTypes.cs">

Nama manifes untuk file sumber daya yang ditentukan dalam cuplikan file proyek berikut adalah Namespace.Classname.fr-FR.resources (di mana Namespace.Classname adalah kelas pertama yang ditentukan dalam MyTypes.cs).

<EmbeddedResource Include="X.fr-FR.resx" DependentUpon="MyTypes.cs">

Properti Penggunaan Sumber Daya Tertanam Berdasarkan Konvensi

Jika EmbeddedResourceUseDependentUponConvention disetel ke false dalam file proyek, setiap nama file manifes sumber daya dibangun berdasarkan namespace akar untuk proyek dan jalur relatif dari akar proyek ke file .resx. Lebih spesifik lagi, nama file manifes sumber daya yang dihasilkan adalah RootNamespace.RelativePathWithDotsForSlashes.[Culture.]resources. Ini juga merupakan logika yang digunakan untuk menghasilkan nama manifes dalam versi .NET Core sebelum 3.0.

Nota

  • Jika RootNamespace tidak ditentukan, defaultnya adalah nama proyek.
  • Jika LogicalName, ManifestResourceName, atau DependentUpon metadata ditentukan di file proyek untuk item EmbeddedResource, aturan penamaan ini tidak berlaku untuk file sumber daya tersebut.

Lihat juga