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 avec LogicalName, ManifestResourceName ou DependentUpon métadonnées.
  • La EmbeddedResourceUseDependentUponConvention propriété n’est pas définie sur false dans le fichier projet. Par défaut, cette propriété est définie sur true. 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é, un EmbeddedResource avec deux points (.) dans le nom de fichier ne fonctionne pas, ce qui signifie que GetManifestResourceNames 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, ManifestResourceNameou DependentUpon métadonnées sont spécifiées pour un EmbeddedResource élément dans le fichier projet, cette règle de nommage ne s’applique pas à ce fichier de ressources.

Voir aussi