MRM のリソース名
MRM のどのリソースにも名前があります。 リソース名は、IETF RFC 3986 に準拠する URI です。
MRM のリソース名は次の形式を取ります。
ms-resource://<PackageFamilyName>/<Root>/<Rest...>
ここで:
ms-resource
はスキームです。<PackageFamilyName>
は権限であり、リソースを使用するアプリのパッケージ ファミリ名、またはパッケージ化されていないアプリのリテラル文字列"Application"
のいずれかです。<Root>
は 1 つのパス セグメントです。<Rest...>
は、スラッシュで区切られている 1 つ以上の他のパス セグメントです。
URI の query 部分と fragment 部分は許可されません。
簡潔にするために、このドキュメントでは通常、スキームや権限のないリソース名 ("strings/foo" や "foo" など) を参照します。
大文字小文字の区別
スキーム ms-resource
では大文字と小文字が区別されますが、パスでは区別されません。
次はすべて同じです。
ms-resource:///FILES/LOGO.PNG
ms-resource:///files/logo.png
ms-resource:///FiLeS/LoGo.PnG
ただし、次は両方ともエラーになります。
MS-RESOURCE:///files/logo.png
Ms-Resource:///files.logo.png
異なるリソース候補で大文字と小文字の使い方が異なる場合、PRI ファイルに表示される文字は実装によって異なります。 ランタイム リソースの検索でも大文字と小文字は区別されないため、これは重要ではありません。
所轄官庁
便宜上、MRM では、リソースをインデクサーに追加するときに、リソース URI で <PackageFamilyName>
を省略できます。 さらに、MRM では、任意の有効な権限を <PackageFamilyName>
として指定できますが、リソース インデクサーの作成時に、packageFamilyName として指定された値に置き換えられます (詳細については、MrmCreateResourceIndexer を参照してください)。
たとえば、リソース インデクサーが "MyApp"
の packageFamilyName で作成されたと仮定すると、次のリソース URI はすべて同じになります。
ms-resource://MyApp/strings/foo // Canonical form.
ms-resource:///strings/foo // Omit the PFN.
ms-resource://App2/strings/foo // PFN "App2" is ignored.
Path
上記の簡略化された文法で示されているように、MRM のすべてのリソース名には、少なくとも 2 つのパス セグメント (<Root>
と <Rest...>
) が必要です。 リソース名にパス セグメントが 1 つしかないか、リソース名がスラッシュで終わっているとエラーになります。 以下はラーです。
ms-resource///hello // Error, only one path segment
ms-resource///strings/hello/ // Error, ends with a slash
URI の合計長の制限 (通常は約 2,000 文字) を除き、使用できるパス セグメントの数に実質上の制限はありません。 以下はすべて有効なリソース名です。
ms-resource:///strings/hello
ms-resource:///files/assets/logo.png
ms-resource:///food/baked/muffins/lemon.and.blueberry/gluten_free
規約
必須ではありませんが、PRI ファイルでは次の規則が使用されます。
- 文字列リソースが "strings"
<RootPath>
に追加されます。 - ファイル リソースが "files"
<RootPath>
に追加されます。 - コンテナー リソース (
resw
ファイルからのリソースなど) は、"resources"<RootPath>
に追加されます。
XAML のローカライズは、"resources" 規則 (詳細については、「x:Uid ディレクティブ」を参照してください) に依存し、他のライブラリもこれらの規則に依存する場合があることに注意してください。
ライブラリのリソースの名前付け
再頒布可能ライブラリの一部として PRI ファイルをビルドする場合は、親アプリ (またはその他のライブラリ) の名前と競合する可能性が低いリソース名を選択することが重要です。 これは、アプリのすべてのリソース (依存ライブラリのリソースを含む) がビルド時に 1 つの PRI ファイルにマージされるためです。詳細については、MrmIndexResourceContainerAutoQualifiers を参照してください。 メイン アプリとそのライブラリの 1 つ (または 2 つのライブラリ) で同じリソース名が使用されている場合、PRI の生成時にエラーが発生します。
これを回避するには、会社の逆引き DNS 名や GUID など、固有のセグメントを含むパスにリソースの名前空間を設定することを検討してください。