从代码中引用dll获取项目名称

时间:2012-02-09 09:20:13

标签: c# .net reflection .net-2.0 system.diagnostics

我正在用C#创建一个类库项目。如何获取将从我的类库调用该方法的项目名称?

我试着反思:

System.Reflection.Assembly.GetExecutingAssembly()

GetCallingAssembly

但它不起作用。

3 个答案:

答案 0 :(得分:1)

我也在寻找这个。文件名我可以从StackFrame获得,就像@Maheep的回答一样,但获得项目名称并不是真的很直接。

一个。我只是得到了一个简单的解决方案:

  1. 根据StackFrame找到的FileName(路径),迭代每个父文件夹。
  2. 使用* .csproj(C#)
  3. 查找任何文件
  4. (可选)打开csproj文件以确保包含当前文件<Compile Include="Folder\File.cs" />
  5. csproj的文件名是项目名称
  6. 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?问题。