繁体   English   中英

c#:检查哪个项目正在调用类库

[英]c#: Check which project is calling class library

我有两个项目称为类库。 我可以在班级图书馆中查看哪个项目正在调用图书馆吗?

嗯...听起来对我不好。 您要实现的目标是从类库->项目创建一个依赖项,而应该是project->类库依赖项。

从我的角度来看,这是“不可能”实现的,如果很难做到,则不被认为是好的做法。 好的类库应具有通用性,不应根据其调用者来改变行为。

(也许您可以更详细地描述问题的性质,所以我可以帮助您更好地找到更好的解决方案)

如果该项目具有不同的名称空间,则可以使用StackTrace构建调用堆栈:

public static void Main()
{
    StackTrace stackTrace = new StackTrace();
    StackFrame[] stackFrames = stackTrace.GetFrames();
    foreach (StackFrame stackFrame in stackFrames)
    {
        Console.WriteLine(stackFrame.GetMethod().Name);
    }
}

为什么不为每个项目在App.Config文件中存储一个唯一值,然后从类库中读取该值。 根据您正在运行的项目(应用程序),它应该选择正确的应用程序配置。 甚至只是检查System.Reflection.Assembly.GetCallingAssembly().GetName().Name()

如果您要查找的是主应用程序程序集,则正确的调用是Assembly.GetEntryAssembly()。FullName仅是我的2¢

Assembly.GetCallingAssembly()将为您提供一个引用,该引用调用了您放置该行代码的方法。 我认为这正是您要问的问题,但是很少有图书馆会关心它的调用者,因此您可能要考虑一下这种方法是否确实正确。

// in Assembly 1
public class Assembly1Class
{
    public void SomeMethod()
    {
        assembly2ClassInstance.SomeAPIMethod();
    }
}

// in Assembly 2 (the library)
public class Assembly2Class
{
    public void SomeAPIMethod()
    {
        Debug.WriteLine(Assembly.GetCallingAssembly().FullName;
    }
}

如果您以某种方式追求安全性,则可能需要.NET代码访问安全性

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM