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);
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?
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.
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.
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[].