C # CompileAssemblyFromSource, добавить ссылки на сборки, которые ему нужны? - PullRequest
7 голосов
/ 30 сентября 2011

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

Однако, если мне нужно скомпилировать код, который имеет "using blah;"утверждение, что он не сможет найти бла и сказать, что отсутствует ресурс.

Так что, если это «System.Windows.Forms», и я говорю «compilerparams.ReferencedAssemblies.Add (» SystemWindows.Forms.dll ")", работает.

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

1 Ответ

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