c# .net .net-4.0 bcl callermembername

c# - CallerMemberName en.NET 4.0 no funciona



.net-4.0 bcl (3)

Estoy intentando usar el atributo CallerMemberName en .NET 4.0 a través del paquete de portabilidad BCL. Siempre está devolviendo una cadena vacía en lugar del nombre del miembro. ¿Qué estoy haciendo mal?

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


Como sé, CallerMemberName es compatible con .Net 4.5 No debe usarlo en .Net 4.0

Alguien implementó esto en .Net 4.0 usando StackTrace. por ejemplo: http://www.journeyintocode.com/2013/04/callermembername-net-40.html

PERO, NO te recomiendo que uses StackTrace ya que podría haber un impacto en el rendimiento. Usar StackTrace para obtener el nombre de la persona que llama es muy lento. Y esto funciona en Depuración, en la versión no puede estar seguro de si StackTrace es "correcto" o no.

Por lo tanto, mi sugerencia es: Simplemente use CallerMemberName en .Net 4.5 o versión posterior. En la versión anterior de .Net, no hay ninguna manera infalible o rápida de hacerlo.


Encontré la solución, aunque no me sirve. KB2468871 instalar KB2468871 sobre .NET Framework 4 para poder usar los atributos de información de la persona que llama. Desafortunadamente, no puedo pedir a cada desarrollador que recuerde instalarlo cuando configura el entorno de desarrollo.


Targeting 4.0 funciona bien si agrega:

namespace System.Runtime.CompilerServices { sealed class CallerMemberNameAttribute : Attribute { } }