我有一个类
public class DataLayerFromOutside
{
public string DataLayerMethod(string dataLayerMethodParameter)
{
NLogging.Info("FromMethod");
return "Hi";
}
}
此类在SampleClassLibrary
中。我有一个控制器,从中调用此方法。
[LogActionFilter]
public class SampleController : ApiController
{
// GET api/sample
public string Get()
{
DataLayerFromOutside businessLayer = new DataLayerFromOutside();
NLogging.Info("Info ");
return businessLayer.DataLayerMethod("Hi");
}
此控制器位于另一个dll'TestLoggingEntryAndExit'
中。
我有一个NLogging
类,我们在其中记录所有活动。这个类包含一个方法
public static void Info(string message, Exception exception = null, [CallerFilePathAttribute] string callerPath = "", [CallerMemberName] string callerMember = "", [CallerLineNumber] int callerLine = 0)
{
Log(LogLevel.Info, message,null, exception, callerPath, callerMember, callerLine);
}
我想找到调用此Info方法的程序集名称。
如何从CallerFilePathAttribute
中找到程序集名称?
对于调用者信息属性,这是不可能的。Roslyn 的积压工作中有一个关于更多呼叫者信息属性的功能请求
目前唯一的方法是使用反射:
//get assembly of caller
var assembly = new StackTrace().GetFrame(1, false).GetMethod().DeclaringType.Assembly;
这在.NET标准(.NET Core)中是不可能的。它应该在Netstandard 2.0 中
编辑:@Eilon是对的。这不是一个可靠的方法。添加[MethodImpl(MethodImplOptions.NoInlining)]
有很大帮助,但不能保证
编辑2:另一种可靠的方法(更复杂)是编写/使用Fody插件。参见Fody网站