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 sLogicalName
,ManifestResourceName
neboDependentUpon
metadaty. - Vlastnost
EmbeddedResourceUseDependentUponConvention
není nastavena nafalse
soubor projektu. Ve výchozím nastavení je tato vlastnost nastavena natrue
hodnotu . 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 hodnotaEmbeddedResource
se dvěma tečkami (.
) v názvu souboru, což znamená, žeGetManifestResourceNames
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 ManifestResourceName
LogicalName
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
LogicalName
je proEmbeddedResource
položku v souboru projektu zadána hodnota ,ManifestResourceName
neboDependentUpon
metadata, toto pravidlo pojmenování se nevztahuje na tento soubor prostředků.