我正在用C#创建一个类库项目。如何获取将从我的类库调用该方法的项目名称?
我试着反思:
System.Reflection.Assembly.GetExecutingAssembly()
和
GetCallingAssembly
但它不起作用。
答案 0 :(得分:1)
我也在寻找这个。文件名我可以从StackFrame
获得,就像@Maheep的回答一样,但获得项目名称并不是真的很直接。
一个。我只是得到了一个简单的解决方案:
StackFrame
找到的FileName(路径),迭代每个父文件夹。<Compile Include="Folder\File.cs" />
B中。我通过使用预构建宏$(ProjectDir)
找到了替代方法,并在此处访问代码中的结果:What's an easy way to access prebuild macros such as $(SolutionDir) and $(DevEnvDir) from code in C#?
答案 1 :(得分:0)
如果我直接理解您的问题,则无法在代码中执行此操作。唯一的方法是使用静态分析代码。
Resharper具有此功能 - 要查找特定类/方法/属性的使用位置,您可以右键单击声明并选择“Find Usages”。这是一个非常方便的功能:)
但是只有调用你方法的代码才有效(在同一个解决方案中)。当第三方使用你的图书馆时,它不会工作。
你到底想要达到什么目的?如果您的方法需要识别呼叫者,则应将其添加为要求(即添加包含呼叫者身份的参数)。
public void MyMethod()
{
// I need name of caller project, but how?
}
public void MyMethod(String callerProject)
{
// People who call this method know the name of their own project :)
}
答案 2 :(得分:0)
您必须使用StackTrace Class。 StackTrace类有GetFrame
方法,它将为您提供调用方法名称。这将返回具有DeclaringType属性的MethodBase class对象。使用此类型信息,您也可以获得装配详细信息。
private void YouCalledMethod()
{
StackTrace stackTrace = new StackTrace();
StackFrame stackFrame = stackTrace.GetFrame(1);
Assembly assembly = stackFrame.GetMethod().DeclaringType.Assembly;
//use this assembly object for your requirement.
}
同时查看这个How to print the current Stack Trace in .NET without any exception?问题。