我已经创建了一个DLL,它将从AssemblyInfo.cs中收集信息。在类构造函数中,我使用反射来获取正在运行的最顶层应用程序。
public class AppInfo()
{
public AppInfo()
{
System.Reflection.Assembly assembly =
System.Reflection.Assembly.GetEntryAssembly();
if (assembly == null)
assembly = System.Reflection.Assembly.GetCallingAssembly();
//code to gather needed information
}
}
这个功能是设计成从任何给定应用程序中的 DLL 调用的,假设该应用程序名字总是 'MyApp'。在 Windows 服务和 Windows 应用程序中获取这些信息不是问题,而我的问题是: 我如何获取顶层网站(top-most Website)的程序集? 我发现了一些文章,在 Global.asax.cs 中移动 Website 的 AssemblyInfo.cs 到网站根目录中,然后通过将 compilerOption 添加到 AssemblyInfo.cs 的物理路径来获取信息。
<compiler
language="c#;cs;csharp"
extension=".cs"
compilerOptions="C:\Sandbox\MyWebSite\AssemblyInfo.cs"
type="Microsoft.CSharp.CSharpCodeProvider,System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4">
使用
System.Reflection.Assembly.GetExecutingAssembly()
,我可以检索网站的AssemblyInfo.cs中的信息。现在,我可以重载我的类的构造函数来接受一个并以这种方式检索信息,但是如果被使用的另一个DLL创建了一个,那么我将得到该DLL的程序集信息而不是父Website的信息。我知道,如果我使用Web应用程序而不是Web站点,我就不会有这个问题,但出于某些原因,我不能使用Web应用程序。您有什么建议,无论我在哪个DLL中,都能从正在运行的网站的AssemblyInfo.cs中读取信息?
编辑:我需要这适用于Web站点、Windows应用程序和Windows服务。