1

У меня есть два файла dll. Скажем, DataLayer.dll и ProcessLayer.dll. DataLayer.dll имеет класс с именем MyClass, как показано ниже:Чтение данных типа из ссылочной dll/сборки

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

и я судил DataLayer.dll во второй сборке ProcessLayer.dll, который имеет один метод с входным параметром в качестве MyClass.

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

Как я могу прочитать все параметры метода от ProcessLayer.dll используя отражение? Я использую

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

и получил ошибку при попытке выполнить method.GetParameters(); заявление.

Не могли бы вы помочь мне?

как получить его с помощью Mono.cecil любой идеи?

+0

Какую ошибку вы получаете с помощью метода method.GetParameters() '? – niksofteng

+0

Got «Не удалось загрузить файл или сборку DataLayer, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null» или одну из его зависимостей. Система не может найти указанный файл ». in error –

+0

Никогда, * никогда *, ** никогда ** не используйте LoadFile(). В этом случае должна выполняться обычная Load(). Используйте LoadFrom(), если вы действительно хотите указать путь. Надеюсь, вы этого не сделаете, ничего хорошего не произойдет, когда вы начнете загружать сборки из корневого каталога. –

ответ

1

Вам необходимо загрузить сборку, затем получить типы, а затем получить методы для типа, которым вы пользуетесь.

var myAssembly Assembly.LoadFrom(@"..\ProcessLayer.dll"); 
var myAssemblyTypes = myAssembly.GetTypes(); 
var firstType = myAssemblyTypes[0]; 
var firstTypeMethods = firstType.GetMethods(); 
var firstTypeFirstMethod = firstTypeMethods[0]; 
var params = firstTypeFirstMethod.GetParameters(); 

Если вам нужен тип из другой сборки, вы можете загрузить его, вам может потребоваться его создание.

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

Ну, я могу получить имя метода, используя GetMethods(); но я ищу способ получить список параметров для каждого из этих методов, используя отражение. Здесь параметр метода ссылается на другую dll. и там я застрял ... –

+0

Хорошо, обновите свой вопрос, чтобы запросить параметры, тогда, в настоящий момент он запрашивает имена методов: Как я могу прочитать все имена методов из ProcessLayer.dll с помощью отражения? –

+0

Я думаю, вы должны быть в порядке, чтобы загрузить вторую сборку. Прокрутите myAssemblyName.GetReferencedAssemblies() и загрузите их. Вам нужно будет убедиться, что они доступны, или вы получите сообщение об ошибке ... –