C# CompileAssemblyFromSource, добавить ссылки на сборки, которые ему нужны?

У меня есть CompileAssemblyFromSource, работающий для кода, который ссылается только на сборки, которые использует моя программа (которая его компилирует). Работает красиво.

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

Поэтому, если это "System.Windows.Forms", и я говорю "compilerparams.ReferencedAssemblies.Add ("System.Windows.Forms.dll")", это работает.

Таким образом, я могу проанализировать файл кода и получить все параметры "using", но как мне узнать, что они должны быть "*.dll", или они являются пространствами имен в другом месте или еще чем-то? Есть ли способ для.NET взять "System.Windows.Forms" и выплюнуть "System.Windows.Forms.dll", потому что это то, что ему нужно, и так далее?

1 ответ

Решение
  1. Прочитайте статью Как среда выполнения находит сборки
  2. Перед компиляцией кода загрузите все сборки, найденные в местах, указанных в пункте 1.
  3. Загрузить все типы во всех сборках и сохранить словарь пространства имен, тип пары
  4. Когда использование встречается в источнике, попробуйте добавить ссылку на сборки из словаря в 3
Другие вопросы по тегам