获取通过代码引用dll的项目名称
本文关键字:项目 dll 引用 代码 获取 | 更新日期: 2023-09-27 18:23:48
我正在用C#做一个类库项目。如何从我的类库中获取将调用该方法的项目的名称?
我尝试了反射:
System.Reflection.Assembly.GetExecutingAssembly()
和
GetCallingAssembly
但没有奏效。
我也在寻找这个。我可以从StackFrame
中获得文件名,就像@Maheep的答案一样,但获得项目名称并不是很简单。
A。我只得到了一个简单的解决方案:
- 根据从
StackFrame
中找到的FileName(路径),对每个父文件夹进行迭代 - 使用*.csproj(C#)查找任何文件
- (可选)打开csproj文件以确保包含当前文件
<Compile Include="Folder'File.cs" />
- csproj的文件名是项目名称
B。我通过使用预构建宏$(ProjectDir)
找到了另一种选择,并在这里访问代码中的结果:从C#中的代码访问预构建宏(如$(SolutionDir)和$(DevEnvDir))有什么简单的方法?
如果我直接理解你的问题,这在代码中是不可能的。唯一的方法是对代码进行静态分析。
Resharper具有此功能-要查找特定类/方法/属性的使用位置,可以右键单击声明并选择"查找用法"。这是一个非常方便的功能:)
但只有调用方法的代码才能工作(在同一解决方案中)。当第三方使用你的图书馆时,它就不起作用了。
你到底想在这里实现什么?如果您的方法需要识别调用者,则应将其作为一项要求添加(即添加一个包含调用者标识的参数)。
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 :)
}
为此,您必须使用StackTrace类。StackTrace类具有GetFrame
方法,该方法将为您提供调用方法的名称。这将返回具有属性DeclaringType的MethodBase类对象。使用此类型信息,您还可以获得程序集详细信息。
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.
}
看看这个如何在.NET中毫无例外地打印当前堆栈跟踪?还有一个问题。