Ich möchte (programmgesteuert - C#) eine Liste aller Klassen in meiner Assembly ausgeben.C#: Liste aller Klassen in Assembly
Alle Hinweise oder Beispielcode, wie Sie dies tun? Betrachtung?
Ich möchte (programmgesteuert - C#) eine Liste aller Klassen in meiner Assembly ausgeben.C#: Liste aller Klassen in Assembly
Alle Hinweise oder Beispielcode, wie Sie dies tun? Betrachtung?
Verwenden Sie Assembly.GetTypes
. Zum Beispiel:
Assembly mscorlib = typeof(string).Assembly;
foreach (Type type in mscorlib.GetTypes())
{
Console.WriteLine(type.FullName);
}
Irgendwelche Vorschläge für große Baugruppen? Wenn ich diesen Code für eine 13,8 MB Assembly ausführe, hängt meine VS-Instanz für das, was sich unendlich anfühlt. Ich probierte eine kleine 9 KB-Assembly und es funktionierte gut. Ich weiß, was Sie denken - warum haben Sie eine 13,8 MB Assembly - es ist Teil meiner Datenschicht, die mit einer NetTeirs Vorlage generiert wurde. Wir haben viele Tische. – dyslexicanaboko
@dyslexicanaboko: Nun, wenn Sie viele Arten haben, wird es eine lange Zeit dauern, sie alle aufzuzählen. Wie viele Typen * sind * in Ihrer Baugruppe? Und was machst du mit ihnen? (Sind Sie sicher, dass das Problem darin besteht, die Typen zu extrahieren, oder was tun Sie danach?) –
Ich kann den asm.GetTypes() -Aufruf nicht erreichen, es hängt einfach - ich meine, es ist offensichtlich die Tatsache, dass es da ist Es gibt eine Menge Typen - ich kann nichts tun, weil es darauf hinausläuft, sie alle zu bekommen. Meine CPU schießt 30% auf einen meiner 4 Kerne. Ich meine wirklich, ich frage mich nur, ob es eine Möglichkeit gibt zu sagen "Hey - schau nur in diesem Namespace" - ich habe den Eindruck, dass es nicht möglich ist, weil die GetTypes() Methode nur einen leeren Konstruktor hat. Ich versuche, einen Objektbrowser von Art zu machen. – dyslexicanaboko
Ich möchte nur zu Jons Beispiel hinzufügen. Um einen Verweis auf Ihre eigene Montage zu erhalten, können Sie verwenden:
Assembly myAssembly = Assembly.GetExecutingAssembly();
System.Reflection
Namespace.
Wenn Sie eine Assembly untersuchen möchten, dass Sie keinen Bezug haben, können Sie entweder von diesen verwenden:
Assembly assembly = Assembly.ReflectionOnlyLoad(fullAssemblyName);
Assembly assembly = Assembly.ReflectionOnlyLoadFrom(fileName);
Wenn Sie Ihre Art instanziiert, sobald Sie haben es gefunden:
Assembly assembly = Assembly.Load(fullAssemblyName);
Assembly assembly = Assembly.LoadFrom(fileName);
Weitere Informationen finden Sie unter Assembly class documentation. Wenn Sie den Verweis auf das Objekt Assembly
haben, können Sie assembly.GetTypes()
wie Jon bereits demonstriert haben.
Wie könnte ich eine komplett andere Assembly verweisen, die in meiner Lösung ist? – Alex
Der einfachste Weg ist, 'typeof' mit einem Typ zu verwenden, von dem Sie wissen, dass er sich in dieser Baugruppe befindet, und dann die' Assembly'-Eigenschaft, wie in meinem Beispiel. –
Wenn Sie eine Assembly referenzieren möchten, sagen Sie abc.dll, das ist in Ihrer Lösung, und wenn Sie den DLL-Namen korrekt codieren, ist ein weiterer Ansatz, die Assembly zu referenzieren: 'Assembly assembly = Assembly.Load (" abc "); ' – Kash
Wenn Sie eine Baugruppe untersuchen möchten, auf die von Ihrem Projekt nicht verwiesen wird, finden Sie in meiner aktualisierten Antwort. – Thorarin