| 

.NET C# Java Javascript Exception

2
Die Aufruferinformationen (Caller Information) werden ausschließlich unter .NET 4.5 bereitgestellt. Gibt es einen Weg, um dieses Informationsprinzip (CallerFilePathAttribute - Quellpfad der aufrufenden Datei, CallerLineAttribute - Zeilennummer, CallerMemberNameAttribute - Methode/Eigenschaftsname des Aufrufers) (Details siehe hier) entsprechend unter .NET 2.0 bis 4.0 nachzubilden?
News:
31.07.2013
Peter Pan 313 1 7
Andreas_mod 1,2k 1 2 7
2 Antworten
1
Auf dieser Seite findest Du die Lösung, wie Du die Attribute auch in älteren .NET-Versionen nachbilden und damit den C#- und VB-Compiler austricksen kannst. Das funktioniert aber nur, wenn Du unter VS2012 eine ältere .NET-Zielplattform wählst und die aktuellen (!) Compiler verwendest. In VS2010 ist diese Lösungsvariante also nicht nutzbar.
31.07.2013
Claus M. 2,9k 9
Danke für diese Lösung, die hilft weiter, da ich eh mit VS2012 arbeite.
Peter Pan 31.07.2013
1
Über den StackFrame kannst du die Informationen zur Laufzeit ermitteln. Es ist aber recht langsam.

string methodName = (new System.Diagnostics.StackFrame(1, true)).GetMethod().Name;

--------------------------------------------------------------------------------------------

Übrigens bin ich auf einen interessanten Hinweis bei Stackoverflow gestoßen. Und zwar soll es ab .net 3.5 reichen die Caller-Attribute einfach zu deklarieren um Sie auch in .net 3.5 und 4.0 benutzen zu können. Siehe: http://stackoverflow.com/questions/12098267/how-can-i-get-the-name-of-the-calling-function-in-c#13026238

namespace System.Runtime.CompilerServices
{
[AttributeUsageAttribute(AttributeTargets.Parameter, Inherited = false)]
public sealed class CallerMemberNameAttribute : Attribute
{
}

[AttributeUsageAttribute(AttributeTargets.Parameter, Inherited = false)]
public sealed class CallerFilePathAttribute : Attribute
{
}

[AttributeUsageAttribute(AttributeTargets.Parameter, Inherited = false)]
public sealed class CallerLineNumberAttribute : Attribute
{
}
}


Ob das wirklich funktioniert und wenn ja, ob es auch in .net 2.0 und 3.0 funktioniert kann ich leider nicht sagen.
31.07.2013
Floyd 14,6k 3 9
Floyd 14,6k 3 9
Danke für diese Hinweise. Laut der weiterführenden Lösung von @Claus M. soll die Definition der Attribute nur unter den aktuellen Compilern von VS2012 funktionieren, dann aber auch für .NET 2, 3 und 4..
Peter Pan 31.07.2013
Sehr interessant :)
Floyd 31.07.2013

Stelle deine .net-Frage jetzt!