Nama sumber daya di MRM
Setiap sumber daya di MRM memiliki nama. Nama sumber daya adalah URI yang sesuai dengan IETF RFC 3986.
Nama sumber daya dalam MRM adalah dari formulir berikut:
ms-resource://<PackageFamilyName>/<Root>/<Rest...>
Mana:
-
ms-resource
adalah skemanya. -
<PackageFamilyName>
adalah otoritas dan merupakan Nama Keluarga Paket aplikasi yang akan menggunakan sumber daya, atau string"Application"
harfiah untuk aplikasi yang tidak dikemas. -
<Root>
adalah segmen jalur tunggal. -
<Rest...>
adalah satu atau beberapa segmen jalur lainnya yang dipisahkan oleh garis miring.
Bagian kueri dan fragmen URI tidak diizinkan.
Untuk brevity, dokumentasi ini biasanya mengacu pada nama sumber daya tanpa skema atau otoritas (misalnya "strings/foo" atau hanya "foo").
Sensitivitas huruf besar/besar
Meskipun skema ms-resource
peka huruf besar/kecil, jalurnya tidak.
Semua hal berikut sama:
ms-resource:///FILES/LOGO.PNG
ms-resource:///files/logo.png
ms-resource:///FiLeS/LoGo.PnG
Tetapi berikut ini adalah kedua kesalahan:
MS-RESOURCE:///files/logo.png
Ms-Resource:///files.logo.png
Jika kandidat sumber daya yang berbeda menggunakan casing yang berbeda, kandidat yang muncul dalam file PRI bergantung pada implementasi. Ini tidak masalah, karena pencarian sumber daya runtime juga tidak peka huruf besar/kecil.
Otoritas
Untuk kenyamanan, MRM memungkinkan URI sumber daya untuk menghilangkan <PackageFamilyName>
saat menambahkan sumber daya ke pengindeks. Selain itu, MRM memungkinkan menentukan otoritas yang valid sebagai <PackageFamilyName>
tetapi akan diganti dengan nilai yang ditentukan sebagai packageFamilyName saat membuat pengindeks sumber daya (lihat MrmCreateResourceIndexer untuk informasi selengkapnya).
Misalnya, dengan asumsi pengindeks sumber daya dibuat dengan packageFamilyName , "MyApp"
maka semua URI sumber daya berikut setara:
ms-resource://MyApp/strings/foo // Canonical form.
ms-resource:///strings/foo // Omit the PFN.
ms-resource://App2/strings/foo // PFN "App2" is ignored.
Jalur
Seperti yang ditunjukkan oleh tata bahasa yang disederhanakan di atas, semua nama sumber daya dalam MRM harus memiliki setidaknya dua segmen jalur, <Root>
dan <Rest...>
. Ini adalah kesalahan untuk memiliki segmen jalur tunggal dalam nama sumber daya, atau untuk mengakhiri nama sumber daya dengan garis miring. Berikut ini adalah kesalahan:
ms-resource///hello // Error, only one path segment
ms-resource///strings/hello/ // Error, ends with a slash
Tidak ada batas praktis untuk jumlah segmen jalur yang dapat Anda miliki, selain batasan panjang total URI (biasanya sekitar 2.000 karakter). Semua yang berikut ini adalah nama sumber daya yang valid:
ms-resource:///strings/hello
ms-resource:///files/assets/logo.png
ms-resource:///food/baked/muffins/lemon.and.blueberry/gluten_free
Konvensi
Meskipun tidak diperlukan, konvensi berikut digunakan dalam file PRI.
- Sumber daya string ditambahkan ke "string"
<RootPath>
. - Sumber daya file ditambahkan ke "file"
<RootPath>
. - Resoure kontainer (misalnya sumber daya dari
resw
file) ditambahkan ke "sumber daya"<RootPath>
.
Perhatikan bahwa pelokalan XAML tergantung pada konvensi "sumber daya" (lihat direktif x:Uid untuk info lebih lanjut), dan pustaka lain juga dapat bergantung pada konvensi ini.
Penamaan sumber daya untuk pustaka
Saat membangun file PRI menjadi bagian dari pustaka yang dapat didistribusikan ulang, penting untuk memilih nama sumber daya yang tidak mungkin bertentangan dengan nama aplikasi induk (atau pustaka lainnya). Ini karena semua sumber daya untuk aplikasi (termasuk sumber daya untuk pustaka dependen) digabungkan ke dalam satu file PRI pada waktu build - lihat MrmIndexResourceContainerAutoQualifiers untuk informasi selengkapnya. Jika nama sumber daya yang sama digunakan oleh aplikasi utama dan salah satu pustakanya (atau oleh dua pustaka) maka kesalahan akan terjadi saat menghasilkan PRI.
Untuk menghindari hal ini, pertimbangkan untuk mengirimkan nama sumber daya Anda ke jalur yang menyertakan segmen unik, seperti nama DNS terbalik perusahaan Anda atau GUID.