2015-08-17 3 views
3

Я пытаюсь получить список ссылочных сборок для сборки, которую загружаю в основное приложение в MEF.Как получить список всех ссылочных сборок (загруженных или нет)

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

Я попытался с помощью

List<AssemblyName> a = Assembly.GetEntryAssembly().GetReferencedAssemblies().ToList(); 

Но когда я это делаю, это только показывает мне сборки, используемые/загружены на этой стадии. Мне нужен полный список (во время выполнения) собраний, на которые делается ссылка (реплика папки ссылок в VS), независимо от того, используются ли они в этот момент или вообще.

ответ

1

Вы можете извлечь эту информацию из метаданных файла. Самый быстрый способ, вероятно, использовать одну из библиотек для этого.

Например, вы можете использовать Mono.Cecil

Как это:

var md = ModuleDefinition.ReadModule(assemblyPath); 
foreach (var reference in md.AssemblyReferences) 
{ 

} 
2

Перед загрузкой плагина, вы можете загрузить его для отражения только то, что будет загружать только метаданные файла. Например:

var assm = Assembly.ReflectionOnlyLoadFrom(@"Same.dll"); 
    var reff = assm.GetReferencedAssemblies(); 

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

+0

Добро пожаловать в переполнение стека! Хотя этот код может ответить на вопрос, было бы лучше включить какой-то контекст, объяснить, как он работает, и описать, когда его использовать. Ответы только на код не полезны в долгосрочной перспективе. – ryanyuyu

+0

@Juan Я попробовал оба ваших метода, и оба они возвращают тот же список. Вот пример того, что я ожидаю и что получаю. Зеленые точки указывают ссылки, которые включены в список результатов, а красные точки - те, которые нет. http://i58.tinypic.com/169glly.png – Attie

+0

Поскольку эти библиотеки не используются в вашей библиотеке, а метаинформация не содержит информации о них. – MIVer

Смежные вопросы