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 .

Tip

Jika Anda secara eksplisit menambahkan item sumber daya ke file proyek Anda, dan juga disertakan dengan default termasuk glob untuk .NET Core, Anda akan mendapatkan kesalahan build. Untuk menyertakan file sumber daya secara manual sebagai EmbeddedResource item, atur properti ke EnableDefaultEmbeddedResourceItems 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 sumber daya dikolokasikan dengan file sumber (.cs atau .vb) dari nama file akar yang sama, nama lengkap jenis pertama yang ditentukan 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.

Metadata LogicalName

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" />

Catatan

  • 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 EmbeddedResource item dengan ManifestResourceName metadata (dan LogicalName tidak ada), ManifestResourceName nilai, 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 DependentUpon

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 EmbeddedResourceUseDependentUponConvention

Jika EmbeddedResourceUseDependentUponConvention diatur ke false dalam file proyek, setiap nama file manifes sumber daya didasarkan pada namespace layanan akar untuk proyek dan jalur relatif dari akar proyek ke file .resx . Lebih khusus lagi, nama file manifes sumber daya yang dihasilkan adalah RootNamespace.RelativePathWithDotsForSlashes.[ Budaya.] sumber daya. Ini juga merupakan logika yang digunakan untuk menghasilkan nama manifes dalam versi .NET Core sebelum 3.0.

Catatan

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

Lihat juga