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.
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 metadatiLogicalName
,ManifestResourceName
oDependentUpon
. - La proprietà
EmbeddedResourceUseDependentUponConvention
non è impostata sufalse
nel file di progetto. Per impostazione predefinita, questa proprietà è impostata sutrue
. 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.
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 cheGetManifestResourceNames
non restituisce tale file.L'esempio seguente funziona correttamente:
<EmbeddedResource Include="X.resx" />
L'esempio seguente non funziona:
<EmbeddedResource Include="X.fr-FR.resx" />
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" />
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">
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
oDependentUpon
vengono specificati per un elementoEmbeddedResource
nel file di progetto, questa regola di denominazione non si applica a tale file di risorse.
Feedback su .NET
.NET è un progetto di open source. Selezionare un collegamento per fornire feedback: