Condividi tramite


Come vengono denominati i file manifesto delle risorse

Quando MSBuild compila un progetto .NET Core, i file di risorse XML con estensione resx vengono convertiti in file binari con estensione resources . I file binari sono incorporati nell'output del compilatore e possono essere letti da ResourceManager. Questo articolo descrive in che modo MSBuild sceglie un nome per ogni file con estensione resources .

Suggerimento

Se si aggiunge in modo esplicito un elemento di risorsa al file di progetto ed è incluso anche con i glob predefiniti per .NET Core, verrà visualizzato un errore di build. Per includere manualmente i file di risorse come EmbeddedResource elementi, impostare la EnableDefaultEmbeddedResourceItems proprietà su false.

Nome predefinito

In .NET Core 3.0 e versioni successive viene usato il nome predefinito per un manifesto della risorsa quando vengono soddisfatte entrambe le condizioni seguenti:

  • Il file di risorse non è incluso in modo esplicito nel file di progetto come elemento EmbeddedResource con i metadati LogicalName, ManifestResourceName o DependentUpon.
  • La EmbeddedResourceUseDependentUponConvention proprietà non è impostata su false nel file di progetto. Per impostazione predefinita, questa proprietà è impostata su true. Per ulteriori informazioni, consultare EmbeddedResourceUseDependentUponConvention.

Se il file di risorse è condiviso con un file di origine (.cs o .vb) dello stesso nome di file radice, il nome completo del primo tipo definito nel file di origine viene usato per il nome del file manifesto. Ad esempio, se MyNamespace.Form1 è il primo tipo definito in Form1.cs e Form1.cs si trova in un percorso condiviso con Form1.resx, il nome manifesto generato per tale file di risorse è MyNamespace.Form1.resources.

Metadati NomeLogico

Se un file di risorse viene incluso in modo esplicito nel file di progetto come EmbeddedResource elemento con LogicalName metadati, il LogicalName valore viene usato come nome manifesto. LogicalName ha la precedenza su qualsiasi altro metadati o impostazione.

Ad esempio, il nome del manifesto per il file di risorse definito nel frammento di file di progetto seguente è SomeName.resources.

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

oppure

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

Annotazioni

  • Se LogicalName non viene specificato, un oggetto EmbeddedResource con due punti (.) nel nome file non funziona, il che significa che GetManifestResourceNames non restituisce tale file.

    L'esempio seguente funziona correttamente:

    <EmbeddedResource Include="X.resx" />
    

    L'esempio seguente non funziona:

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

Metadati di ManifestResourceName

Se un file di risorse viene incluso in modo esplicito nel file di progetto come EmbeddedResource elemento con ManifestResourceName metadati (ed LogicalName è assente), il ManifestResourceName valore, combinato con l'estensione .resources del file, viene usato come nome del file manifesto.

Ad esempio, il nome del manifesto per il file di risorse definito nel frammento di file di progetto seguente è SomeName.resources.

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

Il nome del manifesto per il file di risorse definito nel frammento di file di progetto seguente è SomeName.fr-FR.resources.

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

Metadati DependentUpon

Se un file di risorse viene incluso esplicitamente nel file di progetto come EmbeddedResource elemento con DependentUpon metadati (e LogicalName e ManifestResourceName sono assenti), le informazioni dal file di origine definite da DependentUpon vengono utilizzate per il nome del file manifesto della risorsa. In particolare, il nome del primo tipo definito nel file di origine viene usato nel nome del manifesto come indicato di seguito: Namespace.Classname[. Culture].resources.

Ad esempio, il nome del manifesto per il file di risorse definito nel frammento di file di progetto seguente è Namespace.Classname.resources (dove Namespace.Classname è la prima classe definita in MyTypes.cs).

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

Il nome del manifesto per il file di risorse definito nel frammento di file di progetto seguente è Namespace.Classname.fr-FR.resources (dove Namespace.Classname è la prima classe definita in MyTypes.cs).

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

EmbeddedResourceUseDependentUponConvention - proprietà

Se EmbeddedResourceUseDependentUponConvention è impostato su false nel file di progetto, ogni nome del file manifesto della risorsa si basa sullo spazio dei nomi radice per il progetto e sul percorso relativo dalla radice del progetto al file resx . In particolare, il nome del file manifesto della risorsa generato è RootNamespace.RelativePathWithDotsForSlashes.[ Culture.]risorse. Questa è anche la logica usata per generare nomi manifesto nelle versioni di .NET Core precedenti alla 3.0.

Annotazioni

  • Se RootNamespace non è definito, per impostazione predefinita viene impostato il nome del progetto.
  • Se LogicalName, ManifestResourceNameo DependentUpon i metadati vengono specificati per un EmbeddedResource elemento nel file di progetto, questa regola di denominazione non si applica a tale file di risorse.

Vedere anche