首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从CallerFilePathAttribute查找程序集名称

从CallerFilePathAttribute查找程序集名称
EN

Stack Overflow用户
提问于 2017-02-08 12:10:44
回答 1查看 469关注 0票数 0

我有一节课

代码语言:javascript
运行
复制
public class DataLayerFromOutside
{
    public string DataLayerMethod(string dataLayerMethodParameter)
    {
        NLogging.Info("FromMethod");
        return "Hi";
    }
}

这个类在SampleClassLibrary中。我有一个控制器,这个方法是从这个控制器调用的。

代码语言:javascript
运行
复制
[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类

代码语言:javascript
运行
复制
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中查找程序集名称

EN

回答 1

Stack Overflow用户

发布于 2017-02-14 04:08:34

对于调用者信息属性,这是不可能的。有一个a feature request for more caller info attributes on the backlog of Roslyn

目前唯一的方法是使用反射:

代码语言:javascript
运行
复制
//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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42104544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档