繁体   English   中英

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

[英]In C#, how can I get the name of the calling project from within a referenced project?

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

我需要我的日志记录类,以便能够识别何时从网站请求请求到Web服务。 以前,我曾将Web服务作为单独的应用程序在网站下面运行,所以我只使用了不同的配置文件,效果很好。 但是我希望Web服务现在可以在同一应用程序下运行。

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

  • Assembly.GetExecutingAssembly()返回My.Business
  • Assembly.GetEntryAssembly()为null
  • 我可以检查StackTrace,但这似乎草率,我该如何退后? 尤其是因为日志记录可能是由My.Business中最初从其他项目之一调用的代码触发的。

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

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

谢谢!

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

return Assembly.GetCallingAssembly().FullName;

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

话虽如此,我倾向于同意梅里昂·休斯的上述评论。 您可能想考虑将任何必需的信息传递给日志记录类,尤其是如果将来有可能在更多应用程序中使用它时。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM