Udostępnij za pośrednictwem


Jak mają być nazwane pliki manifestu zasobu

Gdy program MSBuild kompiluje projekt .NET Core, pliki zasobów XML, które mają rozszerzenie pliku resx , są konwertowane na pliki binarne .resources . Pliki binarne są osadzone w danych wyjściowych kompilatora i mogą być odczytywane przez element ResourceManager. W tym artykule opisano, jak program MSBuild wybiera nazwę dla każdego pliku resources .

Wskazówka

Jeśli jawnie dodasz element zasobu do pliku projektu i jest on również dołączony za pomocą domyślnych wzorców include dla .NET Core, pojawi się błąd kompilacji. Aby ręcznie dodać pliki zasobów jako EmbeddedResource elementy, ustaw właściwość EnableDefaultEmbeddedResourceItems na false.

Nazwa domyślna

W programie .NET Core 3.0 lub nowszym jest używana domyślna nazwa manifestu zasobu, gdy zostaną spełnione oba następujące warunki:

  • Plik zasobu nie jest jawnie dołączany do pliku projektu jako element EmbeddedResource z metadanymi LogicalName, ManifestResourceName lub DependentUpon.
  • Właściwość EmbeddedResourceUseDependentUponConvention nie jest ustawiona na false w pliku projektu. Domyślnie wartość tej właściwości to true. Aby uzyskać więcej informacji, zobacz EmbeddedResourceUseDependentUponConvention.

Jeśli plik zasobu jest kolokowany z plikiem źródłowym (.cs lub .vb) tej samej nazwy pliku głównego, pełna nazwa pierwszego typu zdefiniowanego w pliku źródłowym jest używana dla nazwy pliku manifestu. Jeśli na przykład MyNamespace.Form1 jest pierwszym typem zdefiniowanym w Form1.cs, a Form1.cs znajduje się w tym samym miejscu co Form1.resx, nazwa manifestu wygenerowana dla tego pliku zasobów to MyNamespace.Form1.resources.

Metadane nazwy logicznej

Jeśli plik zasobu jest jawnie uwzględniony w pliku projektu jako elementem EmbeddedResource z metadanymi LogicalName, wartość LogicalName jest używana jako nazwa manifestu. LogicalName ma pierwszeństwo przed innymi metadanymi lub ustawieniem.

Na przykład nazwa manifestu pliku zasobu zdefiniowanego w poniższym fragmencie pliku projektu to SomeName.resources.

<EmbeddedResource Include="X.resx" LogicalName="SomeName.resources" />

— lub —

<EmbeddedResource Include="X.fr-FR.resx" LogicalName="SomeName.resources" />

Uwaga / Notatka

  • Jeśli LogicalName nie zostanie określony, element EmbeddedResource z dwoma kropkami (.) w nazwie pliku nie działa poprawnie, co oznacza, że GetManifestResourceNames nie zwróci tego pliku.

    Poniższy przykład działa poprawnie:

    <EmbeddedResource Include="X.resx" />
    

    Poniższy przykład nie działa:

    <EmbeddedResource Include="X.fr-FR.resx" />
    

Metadane ManifestResourceName

Jeśli plik zasobu jest jawnie dołączany do pliku projektu jako EmbeddedResource element z ManifestResourceName metadanymi (i LogicalName jest nieobecny), ManifestResourceName wartość w połączeniu z rozszerzeniem pliku resources jest używana jako nazwa pliku manifestu.

Na przykład nazwa manifestu pliku zasobu zdefiniowanego w poniższym fragmencie pliku projektu to SomeName.resources.

<EmbeddedResource Include="X.resx" ManifestResourceName="SomeName" />

Nazwa manifestu pliku zasobu zdefiniowanego w poniższym fragmencie pliku projektu to SomeName.fr-FR.resources.

<EmbeddedResource Include="X.fr-FR.resx" ManifestResourceName="SomeName.fr-FR" />

Metadane zależne od

Jeśli plik zasobów jest jawnie dołączony do pliku projektu jako element typu EmbeddedResource z metadanymi DependentUpon (i jeśli LogicalName i ManifestResourceName są nieobecne), nazwa pliku manifestu zasobów jest tworzona w oparciu o informacje z pliku źródłowego zdefiniowanego przez DependentUpon. W szczególności nazwa pierwszego typu zdefiniowanego w pliku źródłowym jest używana w nazwie manifestu w następujący sposób: Namespace.Classname[. Culture].resources.

Na przykład nazwa manifestu pliku zasobu zdefiniowanego w poniższym fragmencie pliku projektu to Namespace.Classname.resources (gdzie Namespace.Classname jest pierwszą klasą zdefiniowaną w MyTypes.cs).

<EmbeddedResource Include="X.resx" DependentUpon="MyTypes.cs">

Nazwa manifestu pliku zasobu zdefiniowanego w poniższym fragmencie pliku projektu to Namespace.Classname.fr-FR.resources (gdzie Namespace.Classname jest pierwszą klasą zdefiniowaną w MyTypes.cs).

<EmbeddedResource Include="X.fr-FR.resx" DependentUpon="MyTypes.cs">

Właściwość EmbeddedResourceUseDependentUponConvention

Jeśli EmbeddedResourceUseDependentUponConvention jest ustawiony na false w pliku projektu, każda nazwa pliku manifestu zasobów jest oparta na głównej przestrzeni nazw projektu oraz na względnej ścieżce od katalogu głównego projektu do pliku .resx. Dokładniej mówiąc, wygenerowany plik manifestu zasobu to RootNamespace.RelativePathWithDotsForSlashes.[ Kultura.]zasoby. Jest to również logika używana do generowania nazw manifestów w wersjach platformy .NET Core wcześniejszych niż 3.0.

Uwaga / Notatka

  • Jeśli RootNamespace nie jest zdefiniowana, wartość domyślna to nazwa projektu.
  • Jeśli LogicalName metadane, ManifestResourceName lub DependentUpon metadane zostaną określone dla EmbeddedResource elementu w pliku projektu, ta reguła nazewnictwa nie obowiązuje dla tego konkretnego pliku zasobów.

Zobacz także