У меня есть объект CompilerParameters
, который я использую для подачи объекта Microsoft.CSharp.CSharpCodeProvider
и объекта ICodeCompiler
, который вытекает из этого.
Все работает нормально, и я могу скомпилировать код на лету. Моя проблема связана с ссылочными сборками. Прямо сейчас я просто добавляю все сборки из System.Reflection.Assembly.GetExecutingAssembly().GetReferencedAssemblies()
в параметр компилятора ReferencedAssemblies
. Это работает для файлов на жестком диске. Однако у меня есть одна сборка, которая находится в памяти, а не на диске. Когда я пытаюсь ссылаться на него, я получаю FileNotFoundException
, который я ожидаю, поскольку он пытается добавить путь, который не существует.
Итак, как мне передать фактический объект Assembly
на CompilerParameters.ReferencedAssemblies
?
Я видел несколько сообщений в Интернете с 2006 года и до этого говорю, что это просто невозможно. Я надеюсь, что с .net 3.5 и .net 4.0 была добавлена поддержка такого рода вещей, но я не уверен.
FYI, я использую .NET 4.0
Кроме того, прямо сейчас я создаю временный файл из байта [] в программном пространстве, а затем загружаю этот файл в сборку. Я знаю, что компилятор делает это в фоновом режиме, но он также очищает после себя, я считаю. Было бы здорово, если бы я мог:
CompilerParameters.ReferencedAssemblies.Add(Assembly a)