I know. A similar question has already asked.
but I haven\'t got the exact solution
.net supports getting the stack trace information from an exception. You could filter out the method (and its name) by examining the first frame (origin).
new StackTrace(ex).GetFrame(0).GetMethod().Name
This would probably give you exactly the same as the targetsite (the win io), but you can examine the stacktrace for the first user code, or the first frame in your type, or whichever your needs.
For example, getting the name of the culprit thrower in your current assembly:
var s = new StackTrace(ex);
var thisasm = Assembly.GetExecutingAssembly();
var methodname = s.GetFrames().Select(f => f.GetMethod()).First(m => m.Module.Assembly == thisasm).Name;