De naam van bronmanifestbestanden
Wanneer MSBuild een .NET Core-project compileert, worden XML-resourcebestanden met de extensie .resx geconverteerd naar binaire .resources-bestanden . De binaire bestanden worden ingesloten in de uitvoer van de compiler en kunnen worden gelezen door de ResourceManager. In dit artikel wordt beschreven hoe MSBuild een naam kiest voor elk .resources-bestand .
Tip
Als u expliciet een resource-item aan uw projectbestand toevoegt en het ook is opgenomen in de standaard-include globs voor .NET Core, krijgt u een buildfout. Als u resourcebestanden handmatig als EmbeddedResource
items wilt opnemen, stelt u de EnableDefaultEmbeddedResourceItems
eigenschap in op false.
Standaardnaam
In .NET Core 3.0 en hoger wordt de standaardnaam voor een resourcemanifest gebruikt wanneer aan beide van de volgende voorwaarden wordt voldaan:
- Het resourcebestand is niet expliciet opgenomen in het projectbestand als item
EmbeddedResource
metLogicalName
,ManifestResourceName
ofDependentUpon
metagegevens. - De
EmbeddedResourceUseDependentUponConvention
eigenschap is niet ingesteldfalse
op in het projectbestand. Deze eigenschap is standaard ingesteld optrue
. Zie EmbeddedResourceUseDependentUponConvention voor meer informatie.
Als het bronbestand is gekoppeld aan een bronbestand (.cs of .vb) van dezelfde hoofdbestandsnaam, wordt de volledige naam van het eerste type dat in het bronbestand is gedefinieerd, gebruikt voor de naam van het manifestbestand. Als bijvoorbeeld MyNamespace.Form1
het eerste type is dat is gedefinieerd in Form1.cs en Form1.cs wordt geplaatst met Form1.resx, is de gegenereerde manifestnaam voor dat resourcebestand MyNamespace.Form1.resources.
LogicalName-metagegevens
Als een resourcebestand expliciet is opgenomen in het projectbestand als een EmbeddedResource
item met LogicalName
metagegevens, wordt de LogicalName
waarde gebruikt als de manifestnaam. LogicalName
heeft voorrang op andere metagegevens of instelling.
De manifestnaam voor het resourcebestand dat is gedefinieerd in het volgende projectbestandsfragment is bijvoorbeeld SomeName.resources.
<EmbeddedResource Include="X.resx" LogicalName="SomeName.resources" />
– of –
<EmbeddedResource Include="X.fr-FR.resx" LogicalName="SomeName.resources" />
Notitie
Als
LogicalName
dit niet is opgegeven, werkt eenEmbeddedResource
met twee puntjes (.
) in de bestandsnaam niet, wat betekent dat datGetManifestResourceNames
bestand niet wordt geretourneerd.Het volgende voorbeeld werkt correct:
<EmbeddedResource Include="X.resx" />
Het volgende voorbeeld werkt niet:
<EmbeddedResource Include="X.fr-FR.resx" />
Metagegevens van ManifestResourceName
Als een resourcebestand expliciet is opgenomen in het projectbestand als een EmbeddedResource
item met ManifestResourceName
metagegevens (en LogicalName
afwezig is), wordt de ManifestResourceName
waarde, gecombineerd met de bestandsextensie .resources, gebruikt als de manifestbestandsnaam.
De manifestnaam voor het resourcebestand dat is gedefinieerd in het volgende projectbestandsfragment is bijvoorbeeld SomeName.resources.
<EmbeddedResource Include="X.resx" ManifestResourceName="SomeName" />
De manifestnaam voor het resourcebestand dat is gedefinieerd in het volgende projectbestandsfragment is SomeName.fr-FR.resources.
<EmbeddedResource Include="X.fr-FR.resx" ManifestResourceName="SomeName.fr-FR" />
Metagegevens van DependentUpon
Als een resourcebestand expliciet is opgenomen in het projectbestand als een EmbeddedResource
item met DependentUpon
metagegevens (en ManifestResourceName
LogicalName
afwezig zijn), wordt informatie uit het bronbestand dat is gedefinieerd doorDependentUpon
, gebruikt voor de naam van het bronmanifestbestand. De naam van het eerste type dat in het bronbestand is gedefinieerd, wordt als volgt gebruikt in de manifestnaam: Namespace.Classname[. Culture].resources.
De manifestnaam voor het resourcebestand dat is gedefinieerd in het volgende projectbestandsfragment is bijvoorbeeld Namespace.Classname.resources (waar Namespace.Classname
is de eerste klasse die is gedefinieerd in MyTypes.cs).
<EmbeddedResource Include="X.resx" DependentUpon="MyTypes.cs">
De manifestnaam voor het resourcebestand dat is gedefinieerd in het volgende projectbestandsfragment is Namespace.Classname.fr-FR.resources (waar Namespace.Classname
is de eerste klasse die is gedefinieerd in MyTypes.cs).
<EmbeddedResource Include="X.fr-FR.resx" DependentUpon="MyTypes.cs">
Eigenschap EmbeddedResourceUseDependentUponConvention
Als EmbeddedResourceUseDependentUponConvention
dit is ingesteld false
op in het projectbestand, is elke naam van het bronmanifestbestand gebaseerd op de hoofdnaamruimte voor het project en het relatieve pad van de hoofdmap van het project naar het RESX-bestand . Meer specifiek is de naam van het gegenereerde bronmanifestbestand RootNamespace.RelativePathWithDotsForSlashes.[ Cultuur.] resources. Dit is ook de logica die wordt gebruikt voor het genereren van manifestnamen in .NET Core-versies vóór 3.0.
Notitie
- Als
RootNamespace
dit niet is gedefinieerd, wordt deze standaard ingesteld op de projectnaam. - Als
LogicalName
,ManifestResourceName
ofDependentUpon
metagegevens worden opgegeven voor eenEmbeddedResource
item in het projectbestand, is deze naamgevingsregel niet van toepassing op dat resourcebestand.