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 medLogicalName
,ManifestResourceName
ellerDependentUpon
metadata. - Egenskapen
EmbeddedResourceUseDependentUponConvention
är inte inställdfalse
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 enEmbeddedResource
med två punkter (.
) i filnamnet, vilket innebär attGetManifestResourceNames
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 LogicalName
ManifestResourceName
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
,ManifestResourceName
ellerDependentUpon
metadata har angetts för ettEmbeddedResource
objekt i projektfilen gäller inte den här namngivningsregeln för resursfilen.