Создать сборку в памяти - PullRequest
4 голосов
/ 14 июня 2010

Я хотел бы создать сборку в памяти, используя классы Reflection.Emit

В настоящее время я могу создать сборку и получить ее байты, используя что-то вроде

AssemblyBuilder builder =
   AppDomain.CurrentDomain.DefineDynamicAssembly(..., 
      AssemblyBuilderAccess.Save);

... create the assembly ...

builder.Save(targetFileName);

using(FileStream fs = File.Open(targetFileName, FileMode.Open))
{
   ... read the bytes from the file stream ...
}

Однако это происходит путем создания файла в локальной файловой системе.Мне на самом деле не нужен файл, только байты, которые будут в файле.

Можно ли создать сборку без записи каких-либо файлов?

Ответы [ 2 ]

3 голосов
/ 14 июня 2010

Это невозможно в данный момент.Команда C # планирует использовать функцию «компилятор как сервис», которая, надеюсь, будет включена в C # 5.0.

0 голосов
/ 14 июня 2010

Как насчет вызова AssemblyBuilder.GetObjectData, который дает вам сериализованные данные сборки, а не ищет байты?Это, наверное, достаточно хорошо.

MSDN: http://msdn.microsoft.com/en-us/library/system.reflection.assembly.getobjectdata.aspx

Assembly .. ::. Метод GetObjectData
Получает информацию о сериализации со всеми данными, необходимыми для повторного создания этой сборки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...