73 votes

Comment lire les attributs d'assemblage

Dans mon programme, comment puis-je lire les propriétés définies dans AssemblyInfo.cs:

 [assembly: AssemblyTitle("My Product")]
[assembly: AssemblyDescription("...")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Radeldudel inc.")]
[assembly: AssemblyProduct("My Product")]
[assembly: AssemblyCopyright("Copyright @ me 2008")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
 

J'aimerais afficher certaines de ces valeurs à l'utilisateur de mon programme. J'aimerais donc savoir comment les charger à partir du programme principal et des assemblys komponent que j'utilise.

72voto

Jeff Yates Points 36725

C'est assez facile. Vous devez utiliser la réflexion. Vous avez besoin d'une instance de l'Assemblée qui représente l'assemblée avec les attributs que vous souhaitez lire. Un moyen facile d'obtenir cela est de faire:

typeof(MyTypeInAssembly).GetAssembly()

Ensuite, vous pouvez le faire, par exemple:

object[] attributes = assembly.GetCustomAttributes(typeof(AssemblyProductAttribute), false);

AssemblyProductAttribute attribute = null;
if (attributes.Length > 0)
{
   attribute = attributes[0] as AssemblyProductAttribute;
}

Référencement attribute.Product vais maintenant vous donner la valeur de vous passé de l'attribut dans votre AssemblyInfo.cs. Bien sûr, si l'attribut que vous cherchez peut se produire plus d'une fois, vous pouvez obtenir plusieurs instances dans le tableau retourné par GetCustomAttributes, mais ce n'est généralement pas un problème pour le montage au niveau des attributs tels que ceux que vous avez l'espoir de récupérer.

15voto

dmihailescu Points 471

J'ai créé cette méthode d'extension qui utilise Linq:

 public static T GetAssemblyAttribute<T>(this System.Reflection.Assembly ass) where T :  Attribute
{
    object[] attributes = ass.GetCustomAttributes(typeof(T), false);
    if (attributes == null || attributes.Length == 0)
        return null;
    return attributes.OfType<T>().SingleOrDefault();
}
 

et ensuite vous pouvez facilement l'utiliser comme ça:

 var attr = targetAssembly.GetAssemblyAttribute<AssemblyDescriptionAttribute>();
if(attr != null)
     Console.WriteLine("{0} Assembly Description:{1}", Environment.NewLine, attr.Description);
 

0voto

mspmsp Points 843

As-tu essayé:

http://msdn.microsoft.com/en-us/library/hk0t7cax.aspx

La classe Assembly devrait vous fournir les informations souhaitées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X