我创建了一个将从AssemblyInfo.cs中收集信息的DLL。在类构造函数中,我使用Reflection来获取正在运行的最顶级应用程序。在网站中使用反射访问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
}
}
这是怎么打算用来是,如果我在一个给定的应用,MyApp的调用这个来自任何DLL,让说这个名字将永远是“MyApp的”。检索该信息不是问题,它在Windows服务和Windows应用程序中运行良好。我的问题是: 如何获得最顶级网站的大会?
我发现了一些文章,我可以通过将AssemblyInfo.cs移出App_Code文件夹并进入网站根目录来获取Global.asax.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对网站信息的物理路径。现在我可以重载我的AppInfo
类的构造函数来接受Assembly
并以这种方式检索信息,但如果另一个由MyWebSite
使用的DLL创建了new AppInfo()
,我将获得该DLL的程序集信息,而不是父网站。
我知道如果我正在使用网络应用程序而不是网站,我不会遇到这个问题,但出于我不会涉足的原因,我无法使用网络应用程序。任何关于如何从我运行的网站的AssemblyInfo.cs中读取信息的建议,无论我在哪个DLL中?
编辑:我需要这为网站时,Windows应用程序和Windows服务工作
你怎么区分自己的“最高”的应用程序? – 2009-04-16 21:15:51
对于使用Assembly.GetEntryAssembly()的应用程序,返回“最高”应用程序。在网站上,Assembly.GetEntryAssembly()的值为null,如果从网站本身调用,Assembly.GetCallingAssembly()是AppInfo的DLL,而不是我需要的网站。 – 2009-04-16 21:24:20
你有权访问预编译的dll吗? – 2009-04-18 08:25:56