Использование отражения для динамического запроса сборки - PullRequest
0 голосов
/ 19 августа 2011

У меня проблемы с динамическим использованием отражений, например.запрашивать файл .exe, не требуя добавления ссылки для каждой сборки, к которой я хочу запросить.

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

AssemblyName assembly_name = new AssemblyName( "Name" ); 

Проблема заключается не в добавлении аргумента в код, а в коде, требующем прямой ссылки на новую сборку для проверки.

Любые предложения приветствуются.

Ответы [ 3 ]

0 голосов
/ 19 августа 2011

Я не совсем уверен, что вы подразумеваете под "запросом". Если вы хотите узнать, как создать экземпляр из сборки, используя отражение, вот пример:

// From within the current assembly
public CartesianType CreateInstance(string fullyQualifiedClassName)
{
    Assembly assembly = Assembly.GetExecutingAssembly();
    Type target = assembly.GetType(fullyQualifiedClassName, true, true);

    return (CartesianType)Activator.CreateInstance(target);
}

// From an external assembly already referenced in your project
public SomeClass CreateInstance(string fullyQualifiedClassName)
{
    Assembly assembly = Assembly.GetAssembly(typeof(SomeClass));
    Type target = assembly.GetType(fullyQualifiedClassName, true, true);

    return (SomeClass)Activator.CreateInstance(target);
}

Все остальные методы должны использовать Load или LoadFile, LoadFrom и т. Д.

0 голосов
/ 19 августа 2011

Может быть, вы ищете что-то вроде Сесил . Это библиотека (доступна на Windows и других платформах), которая позволяет запрашивать метаданные без необходимости разрешать все ссылки.

0 голосов
/ 19 августа 2011

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

...