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 denganLogicalName
, ,ManifestResourceName
atauDependentUpon
metadata. - Properti
EmbeddedResourceUseDependentUponConvention
tidak diatur kefalse
dalam file proyek. Secara default, properti ini diatur ketrue
. 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 tidakGetManifestResourceNames
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
LogicalName
metadata ,ManifestResourceName
, atauDependentUpon
ditentukan untukEmbeddedResource
item dalam file proyek, aturan penamaan ini tidak berlaku untuk file sumber daya tersebut.