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 EmbeddedResourceLogicalName, ManifestResourceNameDependentUpon vagy metaadatokkal.
  • A EmbeddedResourceUseDependentUponConvention tulajdonság nincs beállítva false a projektfájlban. Ez a tulajdonság alapértelmezés szerint a következőre truevan á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, hogy GetManifestResourceNames 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 ManifestResourceNameLogicalName 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 LogicalNamea projektfájl egy EmbeddedResource eleméhez meg van adva a , ManifestResourceNamevagy DependentUpon metaadatok, ez az elnevezési szabály nem vonatkozik az adott erőforrásfájlra.

Lásd még