Udostępnij za pośrednictwem


Nazwy zasobów w narzędziu MRM

Każdy zasób w narzędziu MRM ma nazwę. Nazwy zasobów są identyfikatorami URI zgodnymi z IETF RFC 3986.

Nazwa zasobu w narzędziu MRM ma następującą postać:

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

Gdzie:

  • ms-resource jest schematem .
  • <PackageFamilyName> jest urzędu i jest nazwą rodziny pakietów aplikacji, która będzie używać zasobów, lub ciąg literału "Application" dla aplikacji rozpakowanych.
  • <Root> to pojedynczy segment ścieżki .
  • <Rest...> to co najmniej jeden segment ścieżki oddzielony ukośnikami.

zapytania i fragmentu fragmentów identyfikatora URI są niedozwolone.

W przypadku zwięzłości ta dokumentacja zazwyczaj odwołuje się do nazw zasobów bez schematu lub urzędu (na przykład "strings/foo" lub po prostu "foo").

Ważność wielkości liter

Mimo że schemat ms-resource uwzględnia wielkość liter, ścieżki nie są.

Wszystkie następujące elementy są równe:

ms-resource:///FILES/LOGO.PNG
ms-resource:///files/logo.png
ms-resource:///FiLeS/LoGo.PnG

Jednak oba błędy są następujące:

MS-RESOURCE:///files/logo.png
Ms-Resource:///files.logo.png

Jeśli różni kandydaci do zasobów używają różnych wielkości liter, ten, który pojawia się w pliku PRI, jest zależny od implementacji. Nie ma to znaczenia, ponieważ wyszukiwanie zasobów środowiska uruchomieniowego jest również bez uwzględniania wielkości liter.

Autorytet

Dla wygody usługa MRM umożliwia identyfikatorom URI zasobów pominięcie <PackageFamilyName> podczas dodawania zasobu do indeksatora. Ponadto narzędzie MRM umożliwia określenie dowolnego urzędu prawidłowego jako <PackageFamilyName>, ale zostanie zastąpiona wartością określoną jako packageFamilyName podczas tworzenia indeksatora zasobów (zobacz MrmCreateResourceIndexer, aby uzyskać więcej informacji).

Załóżmy na przykład, że indeksator zasobów został utworzony za pomocą packageFamilyName"MyApp" wówczas wszystkie następujące identyfikatory URI zasobów są równoważne:

ms-resource://MyApp/strings/foo     // Canonical form.
ms-resource:///strings/foo          // Omit the PFN.
ms-resource://App2/strings/foo      // PFN "App2" is ignored.

Ścieżka

Jak wskazuje uproszczona gramatyka powyżej, wszystkie nazwy zasobów w narzędziu MRM muszą mieć co najmniej dwa segmenty ścieżek, <Root> i <Rest...>. Jest to błąd, aby mieć pojedynczy segment ścieżki w nazwie zasobu lub zakończyć nazwę zasobu ukośnikiem. Poniżej przedstawiono błędy:

ms-resource///hello                 // Error, only one path segment
ms-resource///strings/hello/        // Error, ends with a slash

Nie ma praktycznego ograniczenia liczby segmentów ścieżki, które można mieć, poza limitami całkowitej długości identyfikatora URI (zazwyczaj około 2000 znaków). Wszystkie poniższe nazwy są prawidłowe:

ms-resource:///strings/hello
ms-resource:///files/assets/logo.png
ms-resource:///food/baked/muffins/lemon.and.blueberry/gluten_free

Konwencje

Chociaż nie jest to wymagane, w plikach PRI są używane następujące konwencje.

  • Zasoby ciągów są dodawane do "ciągów" <RootPath>.
  • Zasoby plików są dodawane do "plików" <RootPath>.
  • Zasoby kontenera (np. zasoby z pliku resw) są dodawane do <RootPath>"resources".

Należy pamiętać, że lokalizacja XAML zależy od konwencji "zasobów" (zobacz dyrektywy x:Uid, aby uzyskać więcej informacji), a inne biblioteki mogą również zależeć od tych konwencji.

Nazewnictwo zasobów dla bibliotek

Podczas kompilowania plików PRI, które mają być częścią biblioteki możliwej do ponownego rozpowszechniania, ważne jest, aby wybrać nazwy zasobów, które są mało prawdopodobne, aby powodować konflikt z nazwami aplikacji nadrzędnej (lub innymi bibliotekami). Dzieje się tak, ponieważ wszystkie zasoby aplikacji (w tym zasoby dla bibliotek zależnych) są scalane w jednym pliku PRI w czasie kompilacji — zobacz MrmIndexResourceContainerAutoQualifiers, aby uzyskać więcej informacji. Jeśli ta sama nazwa zasobu jest używana przez główną aplikację i jedną z jej bibliotek (lub przez dwie biblioteki), podczas generowania pri wystąpi błąd.

Aby tego uniknąć, rozważ zmianę nazw zasobów na ścieżkę zawierającą unikatowy segment, taki jak odwrotna nazwa DNS firmy lub identyfikator GUID.