MRM으로 된 리소스 이름

모든 MRM 리소스에는 이름이 있습니다. 리소스 이름은 IETF RFC 3986을 준수하는 URI입니다.

MRM의 리소스 이름은 다음과 같은 형식입니다.

ms-resource://<PackageFamilyName>/<Root>/<Rest...>

여기서

  • ms-resource체계입니다.
  • <PackageFamilyName>권한 이며 리소스를 사용할 앱의 패키지 패밀리 이름 또는 패키지되지 않은 앱에 대한 리터럴 문자열 "Application" 입니다.
  • <Root> 는 단일 경로 세그먼트입니다.
  • <Rest...>는 슬래시로 구분된 하나 이상의 다른 경로 세그먼트입니다.

URI의 쿼리조각 부분은 허용되지 않습니다.

간단히 하기 위해 이 설명서는 일반적으로 체계나 권한이 없는 리소스 이름(예: "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 파일에 나타나는 대/소문자는 구현에 따라 달라집니다. 런타임 리소스 조회도 대/소문자를 구분하지 않으므로 이는 중요하지 않습니다.

Authority

편의를 위해 MRM을 사용하면 리소스 URI가 인덱서에 리소스를 추가할 때 <PackageFamilyName>을 생략할 수 있습니다. 또한 MRM은 어떠한 유효한 권한을 그대로 지정할 <PackageFamilyName> 수 있지만 리소스 인덱서(자세한 내용은 MrmCreateResourceIndexer 참조)를 만들 때 packageFamilyName으로 지정된 값으로 바뀝니다.

예를 들어 "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의 모든 리소스 이름에는 경로 세그먼트가 두 개 이상(<Root><Rest...>) 있어야 합니다. 리소스 이름에 단일 경로 세그먼트가 있거나 리소스 이름을 슬래시로 끝내는 것은 오류입니다. 오류는 다음과 같습니다.

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 파일에서 다음 규칙이 사용됩니다.

  • 문자열 리소스는 "문자열" <RootPath>에 추가됩니다.
  • 파일 리소스는 "파일" <RootPath>에 추가됩니다.
  • 컨테이너 리소스(예: 파일의 resw 리소스)가 "리소스" <RootPath>에 추가됩니다.

XAML 지역화는 "리소스" 규칙(자세한 내용은 x:Uid 지시문 참조)에 따라 달라지며, 다른 라이브러리도 이러한 규칙에 따라 달라질 수 있습니다.

라이브러리에 대한 리소스 이름 지정

PRI 파일을 다시 배포 가능한 라이브러리의 일부로 빌드할 때는 부모 앱(또는 다른 라이브러리)의 이름과 충돌할 가능성이 없는 리소스 이름을 선택하는 것이 중요합니다. 이는 앱의 모든 리소스(종속 라이브러리에 대한 리소스 포함)가 빌드 시 단일 PRI 파일로 병합되기 때문입니다. 자세한 내용은 MrmIndexResourceContainerAutoQualifiers를 참조하세요. 기본 앱과 해당 라이브러리 중 하나(또는 두 개의 라이브러리)에서 동일한 리소스 이름을 사용하는 경우 PRI를 생성할 때 오류가 발생합니다.

이를 방지하려면 리소스의 이름을 회사의 역방향 DNS 이름 또는 GUID와 같은 고유한 세그먼트가 포함된 경로로 지정하는 것이 좋습니다.