Share via


Så här namnges resursmanifestfiler

När MSBuild kompilerar ett .NET Core-projekt konverteras XML-resursfiler, som har filtillägget .resx , till binära .resources-filer . De binära filerna bäddas in i kompilatorns utdata och kan läsas av ResourceManager. Den här artikeln beskriver hur MSBuild väljer ett namn för varje .resources-fil .

Dricks

Om du uttryckligen lägger till ett resursobjekt i projektfilen, och det även ingår i standardobjektet med globs för .NET Core, får du ett byggfel. Om du vill inkludera resursfiler manuellt som EmbeddedResource objekt anger du EnableDefaultEmbeddedResourceItems egenskapen till false.

Standardnamn

I .NET Core 3.0 och senare används standardnamnet för ett resursmanifest när båda följande villkor uppfylls:

  • Resursfilen ingår inte uttryckligen i projektfilen som ett EmbeddedResource objekt med LogicalName, ManifestResourceNameeller DependentUpon metadata.
  • Egenskapen EmbeddedResourceUseDependentUponConvention är inte inställd false på i projektfilen. Som standard är den här egenskapen inställd på true. Mer information finns i EmbeddedResourceUseDependentUponConvention.

Om resursfilen är samlokaliserad med en källfil (.cs eller .vb) med samma rotfilnamn används det fullständiga namnet på den första typen som definieras i källfilen för manifestfilens namn. Om MyNamespace.Form1 till exempel är den första typen som definierats i Form1.cs och Form1.cs är samlokaliserad med Form1.resx, är det genererade manifestnamnet för resursfilen MyNamespace.Form1.resources.

LogicalName-metadata

Om en resursfil uttryckligen ingår i projektfilen som ett EmbeddedResource objekt med LogicalName metadata LogicalName används värdet som manifestnamn. LogicalName har företräde framför andra metadata eller inställningar.

Manifestnamnet för resursfilen som definieras i följande projektfilfragment är till exempel SomeName.resources.

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

-eller-

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

Kommentar

  • Om LogicalName inte anges fungerar inte en EmbeddedResource med två punkter (.) i filnamnet, vilket innebär att GetManifestResourceNames filen inte returneras.

    Följande exempel fungerar korrekt:

    <EmbeddedResource Include="X.resx" />
    

    Följande exempel fungerar inte:

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

ManifestResourceName-metadata

Om en resursfil uttryckligen ingår i projektfilen som ett objekt med ManifestResourceName metadata (och LogicalName saknas) ManifestResourceName används värdet, kombinerat med filnamnstillägget .resources, som manifestfilens EmbeddedResource namn.

Manifestnamnet för resursfilen som definieras i följande projektfilfragment är till exempel SomeName.resources.

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

Manifestnamnet för resursfilen som definieras i följande projektfilfragment är SomeName.fr-FR.resources.

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

DependentUpon-metadata

Om en resursfil uttryckligen ingår i projektfilen som ett EmbeddedResource objekt med DependentUpon metadata (och och LogicalNameManifestResourceName saknas) används information från källfilen som definierats av DependentUpon för resursmanifestfilens namn. Mer specifikt används namnet på den första typen som definieras i källfilen i manifestnamnet enligt följande: Namespace.Classname[. Kultur].resurser.

Manifestnamnet för resursfilen som definieras i följande projektfilfragment är till exempel Namespace.Classname.resources (där Namespace.Classname är den första klassen som definieras i MyTypes.cs).

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

Manifestnamnet för resursfilen som definieras i följande projektfilfragment är Namespace.Classname.fr-FR.resources (där Namespace.Classname är den första klassen som definieras i MyTypes.cs).

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

EmbeddedResourceUseDependentUponConvention-egenskap

Om EmbeddedResourceUseDependentUponConvention anges till false i projektfilen baseras varje resursmanifestfilnamn på rotnamnområdet för projektet och den relativa sökvägen från projektroten till .resx-filen . Mer specifikt är det genererade resursmanifestets filnamn RootNamespace.RelativePathWithDotsForSlashes.[ Kultur.] resurser. Det här är också den logik som används för att generera manifestnamn i .NET Core-versioner före 3.0.

Kommentar

  • Om RootNamespace inte har definierats är det som standard projektnamnet.
  • Om LogicalName, ManifestResourceNameeller DependentUpon metadata har angetts för ett EmbeddedResource objekt i projektfilen gäller inte den här namngivningsregeln för resursfilen.

Se även