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

时间:2009-11-26 09:13:41

标签: c#

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

6 个答案:

答案 0 :(得分:3)

嗯......这对我来说听起来不太好。您要实现的是从类库中创建依赖关系 - >项目应该是项目 - >类库依赖。

从我的观点来看,这是“不可”实现的,如果是这样的话,那就很难实现。一个好的类库应该是通用的,不应该根据它的调用者来改变行为。

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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;
    }
}

答案 5 :(得分:0)

如果您处于安全状态(以某种方式),.NET Code Access Security可能就是您想要的。