在C#中,如何从引用的项目中获取调用项目的名称?

时间:2013-09-13 21:26:05

标签: c# c#-4.0 reflection log4net log4net-configuration

我有三个项目:My.Business,My.WebSite和My.WebService

我需要我的日志记录类能够识别何时从网站和Web服务发出请求。我曾经把Web服务作为一个单独的应用程序在网站下面运行,所以我只使用不同的配置文件,这很好。但我希望现在的Web服务可以在同一个应用程序下运行。

如果我能确定请求是来自My.WebSite还是My.WebService,我会被设置,但我不知道该怎么做。

  • Assembly.GetExecutingAssembly()返回My.Business
  • Assembly.GetEntryAssembly()为空
  • 我可以检查一下StackTrace,但这看起来很草率,我怎么回去?特别是因为日志记录可能是由最初从其他项目之一调用的My.Business中的代码触发的。

由于Web服务请求以“.asmx”结尾,因此以下概念有效,但感觉不对。

return HttpContext.Current.Request.Path.IndexOf(".asmx") >= 0 ? "My.WebService" : "My.WebSite";

谢谢!

2 个答案:

答案 0 :(得分:1)

您应该能够使用Assembly.GetCallingAssembly():

return Assembly.GetCallingAssembly().FullName;

这将返回调用当前执行方法的程序集,因此您可以捕获以这种方式调用My.Business程序集的任何人。

话虽如此,我倾向于同意Meirion Hughes的上述评论。您可能希望考虑传递日志记录类所需的任何信息,特别是如果它可能在将来用于更多应用程序。

答案 1 :(得分:0)

this.GetType().Assembly.FullName将为您提供当前类的程序集名称。