Az erőforrás-jegyzékfájlok elnevezése
Amikor az MSBuild lefordít egy .NET Core-projektet, a .resx kiterjesztésű XML-erőforrásfájlok bináris .resources fájlokká lesznek konvertálva. A bináris fájlok a fordító kimenetébe vannak ágyazva, és a ResourceManager. Ez a cikk azt ismerteti, hogy az MSBuild hogyan választja ki az egyes .resources-fájlok nevét.
Tipp.
Ha explicit módon hozzáad egy erőforráselemet a projektfájlhoz, és az is szerepel a .NET Core alapértelmezett belefoglalási lapjai között, buildelési hibát fog kapni. Az erőforrásfájlok elemként EmbeddedResource
való manuális hozzáadásához állítsa a EnableDefaultEmbeddedResourceItems
tulajdonságot hamis értékre.
Alapértelmezett név
A .NET Core 3.0-s és újabb verzióiban a rendszer az erőforrásjegyzék alapértelmezett nevét használja, ha az alábbi feltételek teljesülnek:
- Az erőforrásfájl nem szerepel explicit módon a projektfájlban elemként
EmbeddedResource
LogicalName
,ManifestResourceName
DependentUpon
vagy metaadatokkal. - A
EmbeddedResourceUseDependentUponConvention
tulajdonság nincs beállítvafalse
a projektfájlban. Ez a tulajdonság alapértelmezés szerint a következőretrue
van állítva: . További információ: EmbeddedResourceUseDependentUponConvention.
Ha az erőforrásfájl ugyanazon gyökérfájlnévhez tartozó forrásfájllal (.cs vagy .vb) van együtt helyezve, a jegyzékfájl neve a forrásfájlban definiált első típus teljes nevét használja. Ha például a Form1.cs első típusa, és Form1.cs a Form1.resx fájllal van együtt helyezve, az erőforrásfájl létrehozott jegyzékneve a MyNamespace.Form1.resources.MyNamespace.Form1
LogicalName metaadatok
Ha egy erőforrásfájl kifejezetten metaadatokat tartalmazó LogicalName
elemként EmbeddedResource
szerepel a projektfájlban, az LogicalName
érték lesz a jegyzék neve. LogicalName
elsőbbséget élvez az egyéb metaadatokkal vagy beállítással szemben.
Az alábbi projektfájl-kódrészletben definiált erőforrásfájl jegyzékneve például SomeName.resources.
<EmbeddedResource Include="X.resx" LogicalName="SomeName.resources" />
-vagy-
<EmbeddedResource Include="X.fr-FR.resx" LogicalName="SomeName.resources" />
Feljegyzés
Ha
LogicalName
nincs megadva,EmbeddedResource
a fájlnévben két pont (.
) nem működik, ami azt jelenti, hogyGetManifestResourceNames
nem adja vissza a fájlt.A következő példa megfelelően működik:
<EmbeddedResource Include="X.resx" />
A következő példa nem működik:
<EmbeddedResource Include="X.fr-FR.resx" />
ManifestResourceName metaadatok
Ha egy erőforrásfájl kifejezetten metaadatokat tartalmazó elemként EmbeddedResource
szerepel a projektfájlban (és LogicalName
hiányzik), akkor a program a ManifestResourceName
.resources fájlkiterjesztéssel együtt a jegyzékfájl neveként használja az ManifestResourceName
értéket.
Az alábbi projektfájl-kódrészletben definiált erőforrásfájl jegyzékneve például SomeName.resources.
<EmbeddedResource Include="X.resx" ManifestResourceName="SomeName" />
A következő projektfájl-kódrészletben definiált erőforrásfájl jegyzékneve SomeName.fr-FR.resources.
<EmbeddedResource Include="X.fr-FR.resx" ManifestResourceName="SomeName.fr-FR" />
DependentUpon-metaadatok
Ha egy erőforrásfájl kifejezetten szerepel a projektfájlban metaadatokat tartalmazó elemként EmbeddedResource
(és ManifestResourceName
LogicalName
hiányoznak), a program az erőforrás-jegyzékfájl nevéhez használja a forrásfájlban DependentUpon
megadott DependentUpon
információkat. Pontosabban a forrásfájlban definiált első típus nevét használja a jegyzékben a következő módon: Namespace.Classname[. Culture].resources.
Az alábbi projektfájl-kódrészletben definiált erőforrásfájl jegyzékneve például a Namespace.Classname.resources (ahol Namespace.Classname
az első osztály van definiálva MyTypes.cs).
<EmbeddedResource Include="X.resx" DependentUpon="MyTypes.cs">
A következő projektfájl-kódrészletben definiált erőforrásfájl jegyzékneve a Namespace.Classname.fr-FR.resources (ahol Namespace.Classname
az első osztály van definiálva a MyTypes.cs).
<EmbeddedResource Include="X.fr-FR.resx" DependentUpon="MyTypes.cs">
EmbeddedResourceUseDependentUponConvention tulajdonság
Ha EmbeddedResourceUseDependentUponConvention
a projektfájlban van beállítva false
, minden erőforrás-jegyzékfájl neve a projekt gyökérnévterétől és a projektgyökér és a .resx fájl közötti relatív elérési úttól függ. Pontosabban a létrehozott erőforrás-jegyzékfájl neve RootNamespace.RelativePathWithDotsForSlashes.[ Kultúra.] erőforrásokat. Ez az a logika is, amellyel a 3.0 előtti .NET Core-verziókban jegyzékneveket hozhat létre.
Feljegyzés
- Ha
RootNamespace
nincs definiálva, akkor alapértelmezés szerint a projekt neve lesz. - Ha
LogicalName
a projektfájl egyEmbeddedResource
eleméhez meg van adva a ,ManifestResourceName
vagyDependentUpon
metaadatok, ez az elnevezési szabály nem vonatkozik az adott erőforrásfájlra.