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
etFileVersion
correspondent par défaut à la valeur de$(Version)
sans le suffixe. Par exemple, si$(Version)
est1.2.3-beta.4
, alors la valeur serait1.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 deIncludeSourceRevisionInInformationalVersion
. - Les propriétés
Copyright
etDescription
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 commandesdotnet
, 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.)
Si l’attribut a des types de paramètres autres que System.String
, vous pouvez spécifier les paramètres à l’aide d’un modèle particulier d’éléments XML pris en charge par la tâche MSBuild WriteCodeFragment
. Consultez Tâche WriteCodeFragment : Générer des attributs au niveau de l’assembly.
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
surfalse
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.