1

Ich habe zwei DLL-Dateien Sagen wir DataLayer.dll und ProcessLayer.dll. DataLayer.dll hat eine Klasse aufgerufen MyClass wie unten:Lesen der Typdetails von referenzierten DLL/Assembly

public class MyClass 
{ 
public string name; 
public int age; 
public string aadhar; 
} 

und ich habe DataLayer.dll in zweiter Baugruppe ProcessLayer.dll referiert die als MyClass ein Verfahren mit dem Eingangsparameter hat.

using DataLayer; 
namespace ProcessLayer 
{ 
    public class Process 
    { 
    public int GetMyClass(MyClass objMy) 
    { 
     return objMy.age; 
    } 
    } 
} 

Wie kann ich alle Methodenparameter von ProcessLayer.dll mit Reflektion lesen? Ich bin mit

Assembly assembly = Assembly.LoadFile(@"C:\ProcessLayer.dll"); 
foreach (Type _type in assembly.GetTypes()) 
{ 
    foreach (var method in _type.GetMethods()) 
    { 
     var parameters = method.GetParameters(); 
    } 
} 

und bekam einen Fehler beim Versuch method.GetParameters(); Anweisung auszuführen.

Können Sie mir bitte helfen?

Wie bekomme ich es mit Mono.cecil eine Idee?

+0

Welchen Fehler bekommen Sie mit 'method.GetParameters()'? – niksofteng

+0

"Konnte Datei oder Assembly nicht laden, DataLayer, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null 'oder eines seiner Abhängigkeiten. Das System kann die angegebene Datei nicht finden." irrtümlich –

+0

Niemals, nie, nie, benutze LoadFile(). In diesem Szenario sollte einfach Load() funktionieren. Verwenden Sie LoadFrom(), wenn Sie wirklich einen Pfad angeben müssen. Hoffentlich geht das nicht, nichts Gutes passiert, wenn Sie beginnen, Assemblys aus dem Root-Verzeichnis zu laden. –

Antwort

1

Sie müssen die Assembly laden, dann die Typen abrufen und dann die Methoden für den gewünschten Typ abrufen.

Wenn Sie einen Typ aus einer anderen Baugruppe benötigen, können Sie diesen laden, Sie müssen ihn möglicherweise auch instanziieren.

Assembly assembly = Assembly.LoadFrom("Assembly.LoadFile(@"..\DataLayer.dll"); 
Type missingType = assembly.GetType(<your missing type>); 
var createTypeInstance = Activator.CreateInstance(missingType); 
+0

Nun, ich bin in der Lage, den Methodennamen mit GetMethods() zu bekommen; aber ich suche nach einer Möglichkeit, die Parameterliste für jede dieser Methoden mit Reflektion zu erhalten. Hier wird der Methodenparameter von einer anderen DLL referenziert. und da steckte ich ... –

+0

Ok, aktualisieren Sie Ihre Frage nach den Parametern zu fragen, im Moment fragt sie nach Methodennamen: Wie kann ich alle Methodennamen von ProcessLayer.dll mit Reflektion lesen? –

+0

Ich denke, Sie sollten in Ordnung sein, nur um die zweite Baugruppe auch zu laden. Durchlaufen Sie myAssemblyName.GetReferencedAssemblies() und laden Sie sie. Sie müssen sicherstellen, dass sie verfügbar sind, oder Sie erhalten einen Fehler ... –