Bonjour,

Je cherche a remplacer la valeur d'un membre (prive) dans un custom attribute via Reflection, mais je bute sur un probleme de sauvegarde de la modification.

En gros, j'ai un custom attribute defini ainsi (je n'ai pas la main sur le source d'ou la modification au runtime) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class CustomAttribute : Attribute
{
	private string myValue;
 
	public CustomAttribute(string myValue)
	{
		this.myValue = myValue;
	}
 
	public string MyValue
	{
		get
		{
			return this.myValue;
		}
	}
}
Jusqu'a present j'appliquais le CustomAttribute a mon assembly comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
[assembly: CustomAttribute("value")]
De cette valeur depend un tas de choses, mais je ne veux pas avoir "value" dans du code compile et souhaite le sortir dans le app.config.

Recuperation du CustomAttribute et du membre prive myValue:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
/*Assembly currentAssembly initialise via Assembly.GetEntryAssembly*/
CustomAttribute attribute;
object[] attributes = currentAssembly.GetCustomAttributes(typeof(CustomAttribute), false);
                if (attributes.Length == 1)
                {
                    attribute = (CustomAttribute)attributes[0];
                }
 
typeof(CustomAttribute)
                .GetField("myValue", BindingFlags.Instance | BindingFlags.NonPublic)
                .SetValue(attribute, "differentValue");
Cependant, quand la librairie qui se base sur cet attribut va recuperer la valeur MyValue, c'est la valeur "value" qui lui est retournee.

Si vous un avis sur le probleme, je suis toute ouie.