![](/img/trans.png)
[英]C# console app (in a different project) calling async method in class library hangs
[英]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.