Sdílet prostřednictvím


Jak jsou pojmenovány soubory manifestu prostředků

Když MSBuild zkompiluje projekt .NET Core, soubory prostředků XML, které mají příponu souboru .resx , se převedou na binární soubory .resources . Binární soubory jsou vloženy do výstupu kompilátoru a lze je číst ResourceManagerpomocí . Tento článek popisuje, jak nástroj MSBuild zvolí název pro každý soubor .resources .

Návod

Pokud do souboru projektu explicitně přidáte položku zdroje, která je také součástí výchozího zahrnutí globů pro .NET Core, zobrazí se chyba sestavení. Chcete-li ručně zahrnout soubory prostředků jako EmbeddedResource položky, nastavte EnableDefaultEmbeddedResourceItems vlastnost na false.

Výchozí název

V .NET Core 3.0 a novějších se při splnění obou následujících podmínek použije výchozí název manifestu prostředku:

  • Soubor zdroje není explicitně součástí souboru projektu jako EmbeddedResource položka s LogicalName, ManifestResourceNamenebo DependentUpon metadaty.
  • Vlastnost EmbeddedResourceUseDependentUponConvention není nastavena na false v souboru projektu. Ve výchozím nastavení je tato vlastnost nastavena na truehodnotu . Další informace naleznete v EmbeddedResourceUseDependentUponConvention.

Pokud je soubor prostředků umístěn společně se zdrojovým souborem (.cs nebo .vb) se stejným názvem kořenového souboru, použije se úplný název prvního typu, který je definovaný ve zdrojovém souboru, pro název souboru manifestu. Pokud je například MyNamespace.Form1 první typ definovaný v Form1.cs a Form1.cs je umístěný společně s Form1.resx, vygenerovaný název manifestu pro tento soubor prostředků je MyNamespace.Form1.resources.

Metadata pro logický název

Pokud je soubor prostředků výslovně součástí souboru projektu jako EmbeddedResource položka s LogicalName metadaty, hodnota LogicalName se použije jako název manifestu. LogicalName má přednost před jakýmkoli jiným metadatem nebo nastavením.

Například název manifestu pro soubor prostředků definovaný v následujícím fragmentu souboru projektu je SomeName.resources.

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

nebo

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

Poznámka:

  • Pokud LogicalName není zadaný, nefunguje hodnota EmbeddedResource se dvěma tečkami (.) v názvu souboru, což znamená, že GetManifestResourceNames tento soubor nevrátí.

    Následující příklad funguje správně:

    <EmbeddedResource Include="X.resx" />
    

    Následující příklad nefunguje:

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

Metadata ManifestResourceName

Pokud je soubor prostředků explicitně zahrnut do souboru projektu jako EmbeddedResource položka s ManifestResourceName metadaty (a LogicalName chybí), ManifestResourceName hodnota se spolu s příponou souboru .resources použije jako manifestní název souboru.

Například název manifestu pro soubor prostředků definovaný v následujícím fragmentu souboru projektu je SomeName.resources.

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

Název manifestu pro soubor prostředků definovaný v následujícím fragmentu kódu souboru projektu je SomeName.fr-FR.resources.

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

Metaúdaje závislé na

Pokud je soubor prostředků explicitně zahrnutý do souboru projektu jako EmbeddedResource položka s DependentUpon metadaty (a LogicalName a ManifestResourceName chybí), použijí se informace ze zdrojového souboru definovaného pomocí DependentUpon pro název souboru manifestu prostředků. Konkrétně se název prvního typu definovaného ve zdrojovém souboru používá v názvu manifestu následujícím způsobem: Namespace.Classname[. Culture].resources.

Například název manifestu pro soubor prostředků definovaný v následujícím fragmentu souboru projektu je Namespace.Classname.resources (kde Namespace.Classname je první třída definovaná v MyTypes.cs).

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

Název manifestu pro soubor prostředků definovaný v následujícím fragmentu kódu souboru projektu je Namespace.Classname.fr-FR.resources (kde Namespace.Classname je první třída definovaná v MyTypes.cs).

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

EmbeddedResourceUseDependentUponConvention – vlastnost

Pokud je v souboru projektu EmbeddedResourceUseDependentUponConvention nastaveno, každý název souboru manifestu prostředku je založený na kořenovém oboru názvů projektu a relativní cesta od kořenového adresáře projektu k souboru false. Konkrétně název vygenerovaného souboru manifestu prostředku je RootNamespace.RelativePathWithDotsForSlashes.[Culture.]resources. Toto je také logika používaná ke generování názvů manifestů ve verzích .NET Core před verzí 3.0.

Poznámka:

  • Pokud RootNamespace není definován, nastaví se jako výchozí název projektu.
  • Pokud jsou pro položku LogicalName v souboru projektu zadána metadata ManifestResourceName, DependentUpon nebo EmbeddedResource, toto pravidlo pojmenování se nevztahuje na tento soubor prostředků.

Viz také