获取Web应用程序程序集名称,而不管当前正在执行的程

是否可以从引用的程序集中获取ASP.NET Web应用程序的程序集名称?

Assembly.GetEntryAssembly在桌面和控制台应用程序中运行良好,但它似乎在Web应用程序中始终为null,而GetExecuting \ GetCalling可能会返回我引用的程序集,而不是Web应用程序中的程序集。


很长的解释:

我编写了一个自定义设置提供程序 ,它不是从应用程序配置文件中读取配置,而是从集中配置服务获取设置。

自定义提供程序位于单独的程序集中,因此可供不同的应用程序使用。

需要使用应用程序程序集名称覆盖ApplicationName属性。

使用提供程序的方法是.net自定义属性 ,因此我无法向其发送任何参数。

由于没有Assembly.Get *汇编方法似乎有效,我唯一能想到的就是要求使用app应用程序名称进行appSetting,但我对此并不满意。 感谢任何帮助,谢谢!

尝试

BuildManager.GetGlobalAsaxType().BaseType.Assembly 

您可以使用

 HttpContext.Current.ApplicationInstance.GetType().Assembly 

我知道这是一个古老的问题,但这是我处理类似情况的方法。 在我的情况下,使用另一个程序集来格式化字符串,其中显示的版本具有相同核心的多个程序。

 Version v = null; var a = Assembly.GetEntryAssembly() ?? GetWebEntryAssembly() ?? Assembly.GetExecutingAssembly(); SnapshotVersion = FileVersionInfo.GetVersionInfo(a.Location).ProductVersion; if (ApplicationDeployment.IsNetworkDeployed) { var d = ApplicationDeployment.CurrentDeployment; v = d.CurrentVersion; v = new Version(v.Major, v.Minor, v.Revision); } else v = a.GetName().Version; if (v != null) version = string.Format("{0}.{1}.{2}", v.Major, v.Minor, v.Build); 

因为这是在静态构造函数中,所以我需要做的就是从Web应用程序调用此静态类的任何属性,然后找到与静态类所在的程序集不同的最后一个调用程序集。 这是通过GetWebEntryAssembly方法实现的。

 private static Assembly GetWebEntryAssembly() { var frames = new StackTrace().GetFrames(); var i = frames.FirstOrDefault(c => Assembly.GetAssembly(c.GetMethod().DeclaringType).FullName != Assembly.GetExecutingAssembly().FullName).GetMethod().DeclaringType; return Assembly.GetAssembly(i); }