Ich habe eine DLL erstellt, die Informationen aus der AssemblyInfo.cs sammeln wird. Im Klassenkonstruktor verwende ich Reflection, um die oberste laufende Anwendung zu ermitteln.
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
}
}
Wenn ich dies von einer beliebigen DLL in einer bestimmten Anwendung, MyApp, aufrufe, wird der Name immer "MyApp" lauten, so wie dies beabsichtigt ist. Das Abrufen dieser Informationen ist kein Problem, und es funktioniert hervorragend in Windows-Diensten und Windows-Anwendungen. Meine Frage ist nun folgende: Wie erhalte ich die Versammlung der obersten Website?
Ich habe ein paar Artikel gefunden, und ich kann die Informationen in der Global.asax.cs erhalten, indem ich die AssemblyInfo.cs für die Website aus dem Ordner App_Code in den Stamm der Website verschiebe. Dann durch Hinzufügen einer CompilerOption zum physischen Pfad der 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">
Damit kann ich Informationen in der AssemblyInfo.cs für die Website abrufen durch System.Reflection.Assembly.GetExecutingAssembly()
. Jetzt kann ich den Konstruktor meiner AppInfo
Klasse zu akzeptieren Assembly
und auf diese Weise Informationen abrufen, aber wenn eine andere DLL, die von MyWebSite
erstellt eine new AppInfo()
Ich erhalte die Assembly-Informationen dieser DLL anstelle der übergeordneten Website.
Ich weiß, dass ich dieses Problem nicht hätte, wenn ich mit Web Apps statt mit Websites arbeiten würde, aber aus Gründen, die ich nicht näher erläutern möchte, kann ich keine Web Apps verwenden. Irgendwelche Vorschläge, wie ich Informationen aus der AssemblyInfo.cs der Website lesen kann, die ich in egal welcher DLL ich bin?
EDITAR: Ich benötige diese Funktion für Websites, Windows-Anwendungen und Windows-Dienste