Comment les fichiers manifeste de ressources sont nommés
Lorsque MSBuild compile un projet .NET Core, les fichiers de ressources XML, qui ont l’extension de fichier .resx, sont convertis en fichiers .resources binaires. Les fichiers binaires sont incorporés dans la sortie du compilateur et peuvent être lus par le ResourceManager. Cet article explique comment MSBuild choisit un nom pour chaque fichier .resources.
Conseil
Si vous ajoutez explicitement un élément de ressource à votre fichier projet et qu’il est également inclus avec les globs include par défaut pour .NET Core, vous obtenez une erreur de build. Pour inclure manuellement des fichiers de ressources en tant qu’éléments EmbeddedResource
, définissez la propriété sur EnableDefaultEmbeddedResourceItems
false.
Nom par défaut
Dans .NET Core 3.0 et versions ultérieures, le nom par défaut d’un manifeste de ressource est utilisé lorsque les deux conditions suivantes sont remplies :
- Le fichier de ressources n’est pas explicitement inclus dans le fichier projet en tant qu’élément
EmbeddedResource
avecLogicalName
,ManifestResourceName
ouDependentUpon
métadonnées. - La
EmbeddedResourceUseDependentUponConvention
propriété n’est pas définie surfalse
dans le fichier projet. Par défaut, cette propriété est définie surtrue
. Pour plus d’informations, consultez EmbeddedResourceUseDependentUponConvention.
Si le fichier de ressources est colocalisé avec un fichier source (.cs ou .vb) du même nom de fichier racine, le nom complet du premier type défini dans le fichier source est utilisé pour le nom de fichier manifeste. Par exemple, si MyNamespace.Form1
est le premier type défini dans Form1.cs et que Form1.cs est colocalisé avec Form1.resx, le nom de manifeste généré pour ce fichier de ressources est MyNamespace.Form1.resources.
Métadonnées LogicalName
Si un fichier de ressources est explicitement inclus dans le fichier projet en tant qu’élément EmbeddedResource
avec LogicalName
des métadonnées, la LogicalName
valeur est utilisée comme nom de manifeste. LogicalName
est prioritaire sur les autres métadonnées ou paramètres.
Par exemple, le nom du manifeste du fichier de ressources défini dans l’extrait de code de fichier projet suivant est SomeName.resources.
<EmbeddedResource Include="X.resx" LogicalName="SomeName.resources" />
-ou-
<EmbeddedResource Include="X.fr-FR.resx" LogicalName="SomeName.resources" />
Notes
Si
LogicalName
n’est pas spécifié, unEmbeddedResource
avec deux points (.
) dans le nom de fichier ne fonctionne pas, ce qui signifie queGetManifestResourceNames
ne retourne pas ce fichier.L’exemple suivant fonctionne correctement :
<EmbeddedResource Include="X.resx" />
L’exemple suivant ne fonctionne pas :
<EmbeddedResource Include="X.fr-FR.resx" />
Métadonnées ManifestResourceName
Si un fichier de ressources est explicitement inclus dans le fichier projet en tant qu’élément EmbeddedResource
avec ManifestResourceName
des métadonnées (et LogicalName
est absent), la ManifestResourceName
valeur, combinée avec l’extension de fichier .resources, est utilisée comme nom de fichier manifeste.
Par exemple, le nom du manifeste du fichier de ressources défini dans l’extrait de code de fichier projet suivant est SomeName.resources.
<EmbeddedResource Include="X.resx" ManifestResourceName="SomeName" />
Le nom du manifeste du fichier de ressources défini dans l’extrait de code de fichier projet suivant est SomeName.fr-FR.resources.
<EmbeddedResource Include="X.fr-FR.resx" ManifestResourceName="SomeName.fr-FR" />
Métadonnées DependentUpon
Si un fichier de ressources est explicitement inclus dans le fichier projet en tant qu’élément EmbeddedResource
avec DependentUpon
des métadonnées (et LogicalName
et ManifestResourceName
sont absents), les informations du fichier source défini par DependentUpon
sont utilisées pour le nom du fichier manifeste de ressource. Plus précisément, le nom du premier type défini dans le fichier source est utilisé dans le nom du manifeste comme suit : Namespace.Classname[.Culture].ressources.
Par exemple, le nom du manifeste du fichier de ressources défini dans l’extrait de code de fichier projet suivant est Namespace.Classname.resources (où Namespace.Classname
est la première classe définie dans MyTypes.cs).
<EmbeddedResource Include="X.resx" DependentUpon="MyTypes.cs">
Le nom du manifeste du fichier de ressources défini dans l’extrait de code de fichier projet suivant est Namespace.Classname.fr-FR.resources (où Namespace.Classname
est la première classe définie dans MyTypes.cs).
<EmbeddedResource Include="X.fr-FR.resx" DependentUpon="MyTypes.cs">
Propriété EmbeddedResourceUseDependentUponConvention
Si EmbeddedResourceUseDependentUponConvention
est défini sur false
dans le fichier projet, chaque nom de fichier manifeste de ressource est basé sur l’espace de noms racine du projet et le chemin d’accès relatif de la racine du projet au fichier .resx. Plus précisément, le nom du fichier manifeste de ressource généré est RootNamespace.RelativePathWithDotsForSlashes.[Culture.]ressources. Il s’agit également de la logique utilisée pour générer des noms de manifeste dans les versions de .NET Core antérieures à la version 3.0.
Notes
- Si
RootNamespace
n’est pas défini, le nom du projet est défini par défaut. - Si
LogicalName
,ManifestResourceName
ouDependentUpon
métadonnées sont spécifiées pour unEmbeddedResource
élément dans le fichier projet, cette règle de nommage ne s’applique pas à ce fichier de ressources.