获取通过代码引用dll的项目名称
我正在用 C# 制作一个类库项目。如何获取将调用我的类库中的方法的项目的名称?
我尝试使用 Reflection:
System.Reflection.Assembly.GetExecutingAssembly()
和 with
GetCallingAssembly
但它不起作用。
I'm making a class library project in C#. How to get the name of the project which will call the method from my class library?
I tried with Reflection:
System.Reflection.Assembly.GetExecutingAssembly()
and with
GetCallingAssembly
but it didn't work.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我也在找这个。我可以从 StackFrame 获取文件名,就像 @Maheep 的答案一样,但获取项目名称并不是很简单。
答:我刚刚得到了一个简单的解决方案:
B。我通过使用预构建宏
$(ProjectDir)
找到了替代方案,并在此处的代码中访问结果:访问预构建宏的简单方法是什么例如 C# 代码中的 $(SolutionDir) 和 $(DevEnvDir)?I am looking for this also. File name I can get from
StackFrame
just like the answer by @Maheep but to get project name is not really straight forward.A. I just got a simple solution:
StackFrame
, iterate for each parent folder.<Compile Include="Folder\File.cs" />
is includedB. I found alternative by using pre-build macro
$(ProjectDir)
and access the result in code here: What's an easy way to access prebuild macros such as $(SolutionDir) and $(DevEnvDir) from code in C#?如果我直接理解你的问题,这是不可能在代码中做到的。做到这一点的唯一方法是对代码进行静态分析。
Resharper 具有此功能 - 要找出使用特定类/方法/属性的位置,您可以单击声明并选择“查找用法”。这是一个非常方便的功能:)
但是只有调用您的方法的代码才知道(在同一解决方案中)。当第三方使用您的库时,它将不起作用。
您到底想在这里实现什么目标?如果您的方法需要识别调用者,您应该将其添加为要求(即添加包含调用者身份的参数)。
If I understand your question directly, this is not possible to do in code. The only way to do this is with static analysis of the code.
Resharper has this ability - To find out where a particular class/method/property is used, you can right click on the declaration and select "Find Usages". This is a very handy feature :)
But that only works of the code calling your method is known (in the same solution). It wont work when third parties consume your library.
What exactly are you trying to achieve here? If your method needs to identify callers, you should add this as a requirement (ie add a parameter containing the caller identity).
为此,您必须使用 StackTrace 类。 StackTrace 类有
GetFrame
方法,它将为您提供调用方法名称。这将返回具有 DeclaringType 属性的 MethodBase 类 对象。使用此类型信息,您还可以获得程序集详细信息。看看这个 如何打印当前.NET 中的堆栈跟踪没有任何例外吗? 问题也是如此。
You will have to use StackTrace Class for this. StackTrace class has
GetFrame
method which will give you calling method name. This will return MethodBase class object which has property DeclaringType. Using this type information you can get assembly details as well.Look at this How to print the current Stack Trace in .NET without any exception? question also.