| 

.NET C# Java Javascript Exception

1
Ist es möglich in C# zur Laufzeit einer Webanwendung alle vorhandenen aspx-Seiten auszulesen?

Wahrscheinlich nicht, oder?
Habt Ihr eine Idee?

Vielen Dank
Marcus
02.09.2011
Gast
11 2
3 Antworten
1
Je nachdem, was Du mit auslesen meinst. Du kannst per Reflection über die Basisklasse Page der aspx-Seiten alle in einer Assembly enthaltenen solchen Typen auslesen. Etwa so:

var allPageTypes = System.Reflection.Assembly.GetExecutingAssembly()
.GetTypes()
.Where(t => t.IsSubclassOf(Page));

Für C# 3.0 (ohne Linq) musst Du es halt in einer foreach machen:
List<Type> allPageTypes = new List<Type>();
foreach(Type t in System.Reflection.Assembly.GetExecutingAssembly().GetTypes())
if(t.IsSubclassOf(Page))
allPageTypes.Add(t);

Viel Erfolg,
Florian
02.09.2011
ffordermaier 8,4k 3 9
Tolle Lösung! Klappt aber nur, wenn alle Seiten mit aspnet_merge (über welchen Weg auch immer) in eine DLL kompiliert wurden (oder wenn alle DLLs geladen sind), oder?
WolfgangKluge 02.09.2011
Richtig, die aktuelle Lösung ist auf eine Assembly beschränkt. Je nachdem, wie seine/ihre Anwendung aufgebaut ist, sehe ich spontan mehrere Möglichkeiten, alle zu erwischen. Angefangen beim Whitebox-Wissen über alle beteiligten Assemblies (z.B. liegen alle in einem Verzeichnis), über die in die AppDomain(s) Geladenen bis hin zu einem Algorithmus, um auch noch alle irgendwie referenzierten Assemblies zu untersuchen.
ffordermaier 02.09.2011
0
Oder Du liest das Verzeichnis aus

var appPath = Request.PhysicalApplicationPath;
System.IO.Directory.GetFiles( appPath, "*.aspx", System.IO.SearchOption.AllDirectories );
02.09.2011
WolfgangKluge 1,0k 2 7
0
Der Beitrag hat mich auch interessiert und ich habe die vorgeschlagenen Lösungen getestet:

Dateien auslesen funktioniert:
System.IO.Directory.GetFiles( appPath, "*.ascx",
System.IO.SearchOption.AllDirectories );


Der Vorschlag über de ExecutingAssembly dunktioniert - wie im Kommentar beschrieben -
nicht immer.
Bei meiner Webanwendung liegen die ascx-Seiten in unterschiedlichen Assemblies und sind von
der Businesslogik getrennt. Wahrscheinlich werden deswegen keine ascx-Seiten gefunden.

Wenn ich jetzt die referenzierten Assemblies auslese bekomme ich ja nur den AssemblyNamen.
AssemblyName[] referencedAssemblies = 
System.Reflection.Assembly.GetExecutingAssembly().GetReferencedAssemblies();

Wie komme vom AssemblyNamen wieder auf die Assembly? bzw: wie kann ich den Type wieder abfragen? Über den FullName?
05.09.2011
MarcusS 207 1 5
MarcusS 207 1 5
Nutze AppDomain.CurrentDomain.GetAssemblies(), um alle in die AppDomain geladenen Assemblies auszulesen. Wenn Du mehrere AppDomains im Einsatz hast, kannst Du eine minimale Vereinigungsmenge über alle AppDomains bilden und diese verwenden. Die Methode GetAssemblies() der Appdomain liefert ein Assembly[].
ffordermaier 05.09.2011

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH