Définir des attributs d’assembly dans un fichier projet

Vous pouvez utiliser une propriété MSBuild pour transformer les propriétés de projet liées au package en attributs d’assembly dans un fichier de code généré. Par ailleurs, vous pouvez utiliser des éléments MSBuild pour ajouter des attributs d’assembly arbitraires au fichier généré.

Utiliser des propriétés de package en tant qu’attributs d’assembly

La propriété MSBuild GenerateAssemblyInfo contrôle la génération de l’attribut AssemblyInfo pour un projet. Quand la valeur de GenerateAssemblyInfo est true (valeur par défaut), les propriétés de projet liées au package sont transformées en attributs d’assembly. Le tableau suivant répertorie les propriétés de projet qui génèrent les attributs. Il répertorie également les propriétés que vous pouvez utiliser pour désactiver cette génération par attribut, telles que :

<PropertyGroup>
  <GenerateNeutralResourcesLanguageAttribute>false</GenerateNeutralResourcesLanguageAttribute>
</PropertyGroup>
Propriété MSBuild Attribut d’assembly Propriété pour désactiver la génération d’attributs
Company AssemblyCompanyAttribute GenerateAssemblyCompanyAttribute
Configuration AssemblyConfigurationAttribute GenerateAssemblyConfigurationAttribute
Copyright AssemblyCopyrightAttribute GenerateAssemblyCopyrightAttribute
Description AssemblyDescriptionAttribute GenerateAssemblyDescriptionAttribute
FileVersion AssemblyFileVersionAttribute GenerateAssemblyFileVersionAttribute
InformationalVersion AssemblyInformationalVersionAttribute GenerateAssemblyInformationalVersionAttribute
Product AssemblyProductAttribute GenerateAssemblyProductAttribute
AssemblyTitle AssemblyTitleAttribute GenerateAssemblyTitleAttribute
AssemblyVersion AssemblyVersionAttribute GenerateAssemblyVersionAttribute
NeutralLanguage NeutralResourcesLanguageAttribute GenerateNeutralResourcesLanguageAttribute

Remarques sur ces paramètres :

  • AssemblyVersion et FileVersion correspondent par défaut à la valeur de $(Version) sans le suffixe. Par exemple, si $(Version) est 1.2.3-beta.4, alors la valeur serait 1.2.3.
  • InformationalVersion utilise par défaut la valeur de $(Version).
  • Si la propriété $(SourceRevisionId) est présente, elle est ajoutée à InformationalVersion. Vous pouvez désactiver ce comportement à l’aide de IncludeSourceRevisionInInformationalVersion.
  • Les propriétés Copyright et Description sont également utilisées pour les métadonnées NuGet.
  • Configuration, qui correspond par défaut à Debug, est partagé avec toutes les cibles MSBuild. Vous pouvez le définir via l’option --configuration des commandes dotnet, telle que dotnet pack.
  • Certaines des propriétés sont utilisées lors de la création d’un package NuGet. Pour plus d’informations, consultez Propriétés du package.

Définir des attributs arbitraires

Vous pouvez également ajouter vos propres attributs d’assembly au fichier généré. Pour ce faire, définissez des éléments MSBuild <AssemblyAttribute> qui indiquent au Kit de développement logiciel (SDK) le type d’attribut à créer. Ces éléments doivent également inclure tous les paramètres de constructeur requis pour cet attribut. Par exemple, l’attribut System.Reflection.AssemblyMetadataAttribute a un constructeur qui accepte deux chaînes :

  • Un nom pour décrire une valeur arbitraire
  • La valeur à stocker

Si vous avez une propriété Date dans MSBuild contenant la date de création d’un assembly, vous pouvez utiliser AssemblyMetadataAttribute pour incorporer cette date dans les attributs d’assembly à l’aide du code MSBuild suivant :

<ItemGroup>
  <!-- Include must be the fully qualified .NET type name of the Attribute to create. -->
  <AssemblyAttribute Include="System.Reflection.AssemblyMetadataAttribute">
    <!-- _Parameter1, _Parameter2, etc. correspond to the
        matching parameter of a constructor of that .NET attribute type -->
    <_Parameter1>BuildDate</_Parameter1>
    <_Parameter2>$(Date)</_Parameter2>
  </AssemblyAttribute>
</ItemGroup>

Cet élément indique au SDK .NET d’émettre le code C# (ou le code F# ou Visual Basic équivalent) en tant qu’attribut de niveau assembly :

[assembly: System.Reflection.AssemblyMetadataAttribute("BuildDate", "01/19/2024")]

(La chaîne de date réelle correspond à celle que vous avez fournie au moment de la génération.)

Migrer à partir de .NET Framework

Si vous migrez votre projet .NET Framework vers .NET 6 ou version ultérieure, vous pouvez rencontrer une erreur liée à des fichiers d’informations d’assembly en double. Cela est dû au fait que les modèles de projet .NET Framework créent un fichier de code avec des attributs d’informations d’assembly définis. Le fichier se trouve généralement dans .\Properties\AssemblyInfo.cs ou .\Properties\AssemblyInfo.vb. Toutefois, les projets de style SDK génèrent également ce fichier pour vous en fonction des paramètres de projet.

Lorsque vous transférez votre code vers .NET 6 ou version ultérieure, effectuez l’une des opérations suivantes :

  • Désactivez la génération du fichier de code temporaire qui contient les attributs d’informations d’assembly en définissant GenerateAssemblyInfo sur false dans votre fichier projet. Cela vous permet de conserver votre fichier AssemblyInfo.
  • Migrez les paramètres du fichier AssemblyInfo vers le fichier projet, puis supprimez le fichier AssemblyInfo.