Recherche…


Remarques

Le nom de fichier AssemblyInfo.cs est utilisé par convention comme fichier source où les développeurs placent des attributs de métadonnées qui décrivent l'assemblage complet qu'ils construisent.

[AssemblyTitle]

Cet attribut est utilisé pour donner un nom à cet assembly particulier.

[assembly: AssemblyTitle("MyProduct")]

[AssemblyProduct]

Cet attribut est utilisé pour décrire le produit auquel cet assemblage est destiné. Plusieurs assemblys peuvent être des composants du même produit, auquel cas ils peuvent tous partager la même valeur pour cet attribut.

[assembly: AssemblyProduct("MyProduct")]

Global et local AssemblyInfo

Avoir un global permet une meilleure DRY, il suffit de mettre des valeurs différentes dans AssemblyInfo.cs pour les projets qui ont des écarts. Cette utilisation suppose que votre produit dispose de plusieurs projets de studio visuel.

GlobalAssemblyInfo.cs

using System.Reflection;
using System.Runtime.InteropServices;
//using Stackoverflow domain as a made up example    

// It is common, and mostly good, to use one GlobalAssemblyInfo.cs that is added 
// as a link to many projects of the same product, details below
// Change these attribute values in local assembly info to modify the information.
[assembly: AssemblyProduct("Stackoverflow Q&A")]
[assembly: AssemblyCompany("Stackoverflow")]
[assembly: AssemblyCopyright("Copyright © Stackoverflow 2016")]

// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("4e4f2d33-aaab-48ea-a63d-1f0a8e3c935f")]
[assembly: ComVisible(false)] //not going to expose ;)

// Version information for an assembly consists of the following four values:
// roughly translated from I reckon it is for SO, note that they most likely 
// dynamically generate this file
//      Major Version  - Year 6 being 2016
//      Minor Version  - The month
//      Day Number     - Day of month
//      Revision       - Build number
// You can specify all the values or you can default the Build and Revision Numbers 
// by using the '*' as shown below: [assembly: AssemblyVersion("year.month.day.*")]
[assembly: AssemblyVersion("2016.7.00.00")] 
[assembly: AssemblyFileVersion("2016.7.27.3839")]

AssemblyInfo.cs - un pour chaque projet

//then the following might be put into a separate Assembly file per project, e.g.
[assembly: AssemblyTitle("Stackoveflow.Redis")]

Vous pouvez ajouter le GlobalAssemblyInfo.cs au projet local en utilisant la procédure suivante :

  1. Sélectionnez Ajouter / Élément existant ... dans le menu contextuel du projet.
  2. Sélectionnez GlobalAssemblyInfo.cs
  3. Développez le bouton Ajouter en cliquant sur cette petite flèche en bas à droite
  4. Sélectionnez "Ajouter en tant que lien" dans la liste déroulante des boutons.

[AssemblyVersion]

Cet attribut applique une version à l'assembly.

[assembly: AssemblyVersion("1.0.*")]

Le caractère * est utilisé pour incrémenter automatiquement une partie de la version à chaque fois que vous compilez (souvent utilisé pour le numéro "build")

Lecture des attributs d'assemblage

Grâce aux API de réflexion riches de .NET, vous pouvez accéder aux métadonnées d'un assemblage. Par exemple, vous pouvez obtenir l'attribut title de this assembly avec le code suivant

using System.Linq;
using System.Reflection;

...

Assembly assembly = typeof(this).Assembly;
var titleAttribute = assembly.GetCustomAttributes<AssemblyTitleAttribute>().FirstOrDefault();

Console.WriteLine($"This assembly title is {titleAttribute?.Title}");

Contrôle de version automatisé

Votre code dans le contrôle de code source a des numéros de version par défaut (identifiants SVN ou hachages Git SHA1) ou explicitement (balises Git). Plutôt que de mettre à jour manuellement les versions dans AssemblyInfo.cs, vous pouvez utiliser un processus de génération pour écrire la version de votre système de contrôle de code source dans vos fichiers AssemblyInfo.cs et ainsi sur vos assemblys.

Les packages GitVersionTask ou SemVer.Git.Fody NuGet en sont des exemples. Pour utiliser GitVersionTask, par exemple, après avoir installé le package dans votre projet, supprimez les attributs Assembly*Version de vos fichiers AssemblyInfo.cs. Cela met GitVersionTask en charge de la version de vos assemblys.

Notez que le contrôle de version sémantique est de plus en plus la norme de facto , ces méthodes recommandent donc d'utiliser des balises de contrôle de source qui suivent SemVer.

Champs communs

Il est recommandé de compléter les champs par défaut de AssemblyInfo. Les informations peuvent être récupérées par les installateurs et apparaîtront lors de l’utilisation de Programmes et fonctionnalités (Windows 10) pour désinstaller ou modifier un programme.

Le minimum devrait être:

  • AssemblyTitle - généralement l'espace de noms, c'est-à - dire MyCompany.MySolution.MyProject
  • AssemblyCompany - le nom complet des entités légales
  • AssemblyProduct - le marketing peut avoir une vue ici
  • AssemblyCopyright - conservez-le à jour car il a l'air délabré sinon

"AssemblyTitle" devient la "Description du fichier" lors de l'examen de l'onglet Détails de propriétés de la DLL.

[AssemblyConfiguration]

AssemblyConfiguration: l'attribut AssemblyConfiguration doit avoir la configuration utilisée pour générer l'assembly. Utilisez la compilation conditionnelle pour inclure correctement différentes configurations d'assemblage. Utilisez le bloc similaire à l'exemple ci-dessous. Ajoutez autant de configurations différentes que vous utilisez habituellement.

#if (DEBUG)

[assembly: AssemblyConfiguration("Debug")]

#else

[assembly: AssemblyConfiguration("Release")]

#endif

[InternalsVisibleTo]

Si vous souhaitez rendre internal classes ou fonctions internal d'un assembly accessibles à partir d'un autre assembly, vous déclarez ceci par InternalsVisibleTo et le nom de l'assembly autorisé à y accéder.

Dans cet exemple de code dans l'assembly MyAssembly.UnitTests est autorisé à appeler internal éléments internal de MyAssembly .

[assembly: InternalsVisibleTo("MyAssembly.UnitTests")]

Ceci est particulièrement utile pour les tests unitaires afin d'éviter les déclarations public inutiles.

[AssemblyKeyFile]

Chaque fois que nous voulons que notre assemblage s'installe dans GAC, il faut absolument avoir un nom fort. Pour un assemblage fort, nous devons créer une clé publique. Pour générer le fichier .snk .

Pour créer un fichier de clés de nom fort

  1. Invite de commandes des développeurs pour VS2015 (avec accès administrateur)
  2. À l'invite de commandes, tapez cd C: \ Directory_Name et appuyez sur ENTRÉE.
  3. À l'invite de commandes, tapez sn -k KeyFileName.snk, puis appuyez sur ENTRÉE.

une fois le keyFileName.snk créé dans le répertoire spécifié, donnez la référence à votre projet. snk à l'attribut AssemblyKeyFileAttribute le chemin d'accès au fichier snk pour générer la clé lorsque nous construisons notre bibliothèque de classes.

Propriétés -> AssemblyInfo.cs

[assembly: AssemblyKeyFile(@"c:\Directory_Name\KeyFileName.snk")]

Cela va créer un assemblage de noms fort après la construction. Après avoir créé votre assembly de nom fort, vous pouvez l'installer dans GAC

Bonne codage :)



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow