Delen via


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 met LogicalName, ManifestResourceNameof DependentUpon metagegevens.
  • De EmbeddedResourceUseDependentUponConvention eigenschap is niet ingesteld false op in het projectbestand. Deze eigenschap is standaard ingesteld op true. 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 een EmbeddedResource met twee puntjes (.) in de bestandsnaam niet, wat betekent dat dat GetManifestResourceNames 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 ManifestResourceNameLogicalName 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, ManifestResourceNameof DependentUpon metagegevens worden opgegeven voor een EmbeddedResource item in het projectbestand, is deze naamgevingsregel niet van toepassing op dat resourcebestand.

Zie ook