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 il modo in cui 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 e tale elemento è anche incluso con i glob di inclusione predefiniti per .NET Core, verrà visualizzato un errore di compilazione. Per includere manualmente i file di risorse come elementi EmbeddedResource, impostare la proprietà EnableDefaultEmbeddedResourceItems 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 viene incluso in modo esplicito nel file di progetto come elemento EmbeddedResource con metadati LogicalName, ManifestResourceName o DependentUpon.
  • La proprietà EmbeddedResourceUseDependentUponConvention non è impostata su false nel file di progetto. Per impostazione predefinita, questa proprietà è impostata su true. Per altre informazioni, vedere EmbeddedResourceUseDependentUponConvention.

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

Metadati LogicalName

Se un file di risorse viene incluso in modo esplicito nel file di progetto come elemento EmbeddedResource con metadati LogicalName, il valore LogicalName viene usato come nome del manifesto. LogicalName ha la precedenza su tutti gli altri metadati o impostazioni.

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

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

-o-

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

Nota

  • Se non viene specificato LogicalName, 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 ManifestResourceName

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

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

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

Ad esempio, il nome del manifesto per il file di risorse definito nel frammento di codice del 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 in modo esplicito nel file di progetto come elemento EmbeddedResource con metadati DependentUpon (e LogicalName e ManifestResourceName sono assenti), le informazioni del file di origine definito da DependentUpon vengono usate 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 codice del 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 codice del 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">

Proprietà EmbeddedResourceUseDependentUponConvention

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

Nota

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

Vedi anche