我有一节课
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类,我们在其中记录所有包含一个方法的activities.This类
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中查找程序集名称
发布于 2017-02-14 04:08:34
对于调用者信息属性,这是不可能的。有一个a feature request for more caller info attributes on the backlog of Roslyn
目前唯一的方法是使用反射:
//get assembly of caller
var assembly = new StackTrace().GetFrame(1, false).GetMethod().DeclaringType.Assembly;这在.NET标准(.NET核心)中是不可能的。它应该出现在Netstandard 2.0中
编辑:@Eilon是对的。这不是一种可靠的方式。添加[MethodImpl(MethodImplOptions.NoInlining)]有很大帮助,但不能保证
编辑2:另一种可靠的方式(更复杂)是编写/使用Fody插件。请参阅Fody website
https://stackoverflow.com/questions/42104544
复制相似问题