Résolution de l'erreur CS0579 : 'Duplicate 'AssemblyFileVersionAttribute' attribute' lors de la compilation de .NET Core/Standard 2.0

Lors de la création d'un projet .NET Core/Standard 2.0, Visual Studio ne génère pas automatiquement le fichier AssemblyInfo.cs comme dans les projets .NET Framework. En ajoutant manuellement un tel fichier, une erreur CS0579 survient : « Duplicate 'AssemblyFileVersionAttribute' attribute ».

Cette erreur est causée par le fait que .NET Core/Standard 2.0 génère automatiquement les informations d'assembly via les propriétés du projet. Les étapes clés sont :

  1. Les attributs d'asesmbly (version, description) sont configurés dans la page « Package » des propriétés du projet.
  2. Le compilateur génère alors un fichier .AssemblyInfo.cs contenant des attributs comme AssemblyFileVersionAttribute.
  3. Si un fichier AssemblyInfo.cs personnalisé existe, il contient également ces attributs, ce qui provoque une duplication interdite.

Les solutions courantes incluent :

  • Supprimer le fichier AssemblyInfo.cs et utiliser uniquement les configurations du projet (inconvénient : perte de flexibilité).
  • Ajouter des directives #if dans le fichier personnalisé pour ignorer les attributs sous .NET Core/Standard 2.0 (solution complexe).

Solution

Pour empêcher la génération automatique des attributs d'assembly tout en conservant le contrôle personnalisé, modifier le fichier csproj :


<project sdk="Microsoft.NET.Sdk">
  <propertygroup>
    <outputtype>Exe</outputtype>
    <targetframework>netcoreapp2.0</targetframework>
    <assemblyname>ConsoleExample</assemblyname>
    <rootnamespace>ConsoleExample</rootnamespace>
    <generateassemblyinfo>false</generateassemblyinfo>
  </propertygroup>
</project>

Ce changement désactive la génération automatique du fichier .AssemblyInfo.cs, permettant ainsi d'utiliser librement le fichier personnalisé sans conflits.

Mécanisme de génération

Le fichier .AssemblyInfo.cs généré contient des attributs comme :


[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyVersion("1.0.0.0")]

Ce comportement est contrôlé par le fichier Microsoft.NET.GenerateAssemblyInfo.targets, qui définit les règles de génération. Pour une gestion partielle, désactiver certains attributs via des propriétés spécifiques :


<propertygroup>
  <generateassemblyconfigurationattribute>false</generateassemblyconfigurationattribute>
  <generateassemblycompanyattribute>false</generateassemblycompanyattribute>
  <generateassemblyproductattribute>false</generateassemblyproductattribute>
</propertygroup>

Cela permet de conserver certains attributs générés tout en utilisant des configurations personnalisées.

Références

Étiquettes: C# MSBuild AssemblyVersionAttribute .NET Core Project Configuration

Publié le 24 septembre à 09h35