Сборка поставки в CompilerParameters ReferencedAssemblies из памяти, а не диска?

У меня есть объект 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)

Ответ 1

Итак, у вас есть сборка в памяти, которую вы хотите добавить в качестве ссылки?

Я не уверен, что такой подход поддерживается CSharpCodeProvider.