Jak se pojmenují 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 .

Tip

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 soubor projektu. Ve výchozím nastavení je tato vlastnost nastavena na truehodnotu . Další informace naleznete v tématu EmbeddedResourceUseDependentUponConvention.

Pokud je soubor prostředků 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 definovaného ve zdrojovém souboru pro název souboru manifestu. Pokud MyNamespace.Form1 je například první typ definovaný v Form1.cs a Form1.cs je společně s form1.resx, vygenerovaný název manifestu pro tento soubor prostředků je MyNamespace.Form1.resources.

Metadata logického názvu

Pokud je soubor prostředků explicitně součástí souboru projektu jako EmbeddedResource položka s LogicalName metadaty, LogicalName použije se hodnota 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ě součástí souboru projektu jako EmbeddedResource položka s ManifestResourceName metadaty (a LogicalName chybí), ManifestResourceName hodnota v kombinaci s příponou souboru .resources se použije jako název souboru manifestu.

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" />

Metadata DependentUpon

Pokud je soubor prostředků explicitně zahrnutý do souboru projektu jako EmbeddedResource položka s DependentUpon metadaty (a ManifestResourceNameLogicalName chybí), informace ze zdrojového souboru definovaného DependentUpon názvem souboru manifestu prostředků se použijí. 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 kódu 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 EmbeddedResourceUseDependentUponConvention je v false souboru projektu nastaveno, každý název souboru manifestu prostředku je založený na kořenovém oboru názvů projektu a relativní cesta z kořenového adresáře projektu do souboru .resx . Konkrétně název vygenerovaného souboru manifestu prostředku je RootNamespace.RelativePathWithDotsForSlashes.[ Kultura.] prostředků. 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 LogicalNameje pro EmbeddedResource položku v souboru projektu zadána hodnota , ManifestResourceNamenebo DependentUpon metadata, toto pravidlo pojmenování se nevztahuje na tento soubor prostředků.

Viz také