I Klasse haben, zu kooperieren:Reflexion und Attribute in .Net Kern verweigern
public class Domain
{
public static Assembly[] GetAssemblies()
{
var assemblies = new List<Assembly>();
foreach (ProcessModule module in Process.GetCurrentProcess().Modules)
{
try
{
var assemblyName = AssemblyLoadContext.GetAssemblyName(module.FileName);
var assembly = Assembly.Load(assemblyName);
assemblies.Add(assembly);
}
catch (BadImageFormatException)
{
// ignore native modules
}
}
return assemblies.ToArray();
}
}
Meine Hauptklasse wie folgt aussieht:
class Program
{
public static Dictionary<String, Type> animals;
static void Main(string[] args)
{
var assTab = Domain.GetAssemblies();
foreach (var assembly in assTab)
{
var m = assembly.GetCustomAttribute<Method>();
if (m != null)
{
animals.Add(m.Name, assembly.GetType());
}
}
Wo Methode ist eine MethodAttribute
Klasse. In Animal.dll
habe ich Klasse wie Hund, Katze etc. mit Attribut [Method("cat")]
und so weiter. Zu meinem Wörterbuch möchte ich diesen Attributnamen als Zeichenfolge hinzufügen und als Typ (dog, Dog)
usw. eingeben. Mein Problem ist, dass mein Programm das nicht tut. Nach dem Programm in Variable Tier habe ich 0 Punkte. Was sollte ich ändern, um zu erreichen, was ich will?
aber jetzt sehe ich nicht meine dll. Ich habe das Projekttier als Klassenbibliothek eingestellt und in Main füge ich einen Verweis hinzu. Aber jetzt funktioniert mein von dir festgelegter Code im Unendlichen :( – nju
Kannst du klarstellen, was du meinst, im Unendlichen ausgeführt zu werden? Dh in welcher Zeile wird es stecken bleiben oder wenn es eine Schleife ist, was läuft es? Mein Code hat nur eine einzige foreach In diesem Fall sollte es nicht möglich sein, sich zu verklemmen ... Wenn Sie es nicht schon getan haben, sollten Sie den Debugger verwenden, um herauszufinden, was jetzt falsch läuft, und ich vermute, dass Sie später irgendwo Probleme bekommen und dass die Tatsache, dass du vorher nichts in deinem Wörterbuch hattest, ist, warum du dieses Problem jetzt nur bekommst. – Chris
Wenn ich meinen Code debugge, sehe ich Animal in der Assembly Tabelle. In Animal habe ich die Klasse Dog, die Attribut [Method ('dog)] hat. Aber wenn ich deinen Code hinzufüge und debugge, hat es nichts wie Tier gesehen, nur durch andere Versammlungen iterieren – nju