Как получить список всех сборок проекта?

Modus

Пытаюсь написать редактор для свойства нетривиального контрола.

Встала задача получить список всех сборок, собираемых из проектов текущего решения. AppDomain.CurrentDomain.GetAssemblies() не годится, так как не всегда возвращает все сборки.

1 ответ

Modus

Боюсь, вам придется точнее сформулировать вопрос.

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

AppDomain.CurrentDomain.GetAssemblies() позволяет получить список текущих загруженных сборок в рантайме вашего приложения, и это совершенно никак не соотносится со сборками, собираемыми из некоторого абстрактного solution'а.

Так вот, в случае, если вам нужны все текущие сборки, которые отреференсены вашим текущим приложением, то воспользуйтесь примерно следующим методом, модифицировав его рекурсивно, если необходимо (отмечу, что он прогружает все сборки, что может быть нежелательно):

var mainAsm = Assembly.GetEntryAssembly();
  yield(mainAsm);

  foreach (var refAsmName in mainAsm.GetReferencedAssemblies())
  {
      yield Assembly.Load(refAsmName));
  }

В случае, если я понял вас неправильно, и вам просто нужны имена всех сборок (Class libraries), собираемых из текущего solution'а, то распарсите файлы .vcproj, отделите те из них, которые действительно собирают .dll'ки и выцепите их имена.

Сделать это (с учетом xml формата файлов проекта) должно быть достаточно тривиально.

licensed under cc by-sa 3.0 with attribution.