CallerMemberName dans .NET 4.0 ne fonctionne pas

J’essaie d’utiliser l’atsortingbut CallerMemberName dans .NET 4.0 via le pack de portabilité BCL. Il renvoie toujours une chaîne vide au lieu du nom du membre. Qu’est-ce que je fais mal?

 public partial class Form1 : Form { public Form1() { InitializeComponent(); MessageBox.Show(new class2().CallMe); } } public class class2 { public ssortingng CallMe { get { return HelpMe(); } } private ssortingng HelpMe([CallerMemberName] ssortingng param = "") { return param; } } 

Le ciblage 4.0 fonctionne très bien si vous ajoutez:

 namespace System.Runtime.ComstackrServices { sealed class CallerMemberNameAtsortingbute : Atsortingbute { } } 

J’ai trouvé la solution, même si ce n’est pas utile pour moi. Vous devez installer KB2468871 sur .NET Framework 4 pour pouvoir utiliser les atsortingbuts d’informations de l’appelant. Malheureusement, je ne peux pas demander à chaque développeur de ne pas oublier de l’installer lors de la configuration de l’environnement de développement.

Comme je le sais, CallerMemberName est pris en charge à partir de .Net 4.5. Vous ne devez pas l’utiliser dans .Net 4.0.

Quelqu’un a implémenté cela dans .Net 4.0 en utilisant StackTrace. par exemple: http://www.journeyintocode.com/2013/04/callermembername-net-40.html

MAIS, je ne vous recommande PAS d’utiliser StackTrace car il pourrait y avoir un impact négatif sur les performances. Utiliser StackTrace pour obtenir le nom de l’appelant est très lent. Et cela fonctionne dans Debug, dans la version actuelle, vous ne pouvez pas savoir si StackTrace est “correct” ou non.

Ma suggestion est donc la suivante: utilisez simplement CallerMemberName dans la version .NET 4.5 ou ultérieure. Dans la première version de .Net, il n’existait aucun moyen rapide ni infaillible de le faire.