Как сохранить динамически сгенерированную сборку, которая хранится в памяти?

Я хочу получить сборку, сохранив ее на диск или отразив во время выполнения. Сборка динамически генерируется в памяти третьей стороной.

Кто-нибудь знает как это сделать?

3 ответа

Попробуйте это (найдено здесь):

byte[] dllAsArray;

using (MemoryStream stream = new MemoryStream())
{
    BinaryFormatter formatter = new BinaryFormatter();

    formatter.Serialize(stream, results.CompiledAssembly);

    dllAsArray = stream.ToArray();
}

Прошло много времени с тех пор, как я это сделал, я предполагаю, что программа, которая передает вам DLL, использует CompilerParameters.GenerateInMemory= True.

Однако дело в том, что DLL действительно сохраняется на диск в какой-то временной папке на короткое время (пока он работает или что-то в этом роде...), потому что именно так работает (работал?) Компилятор C#.

Я могу помнить, что это было проблемой для меня тогда, но у меня есть проблема с получением подробностей сейчас, дай мне секунду. Вы можете выяснить это с помощью ProcessExplorer или аналогичных инструментов, чтобы увидеть, какие файлы были сохранены / затронуты.

Вы можете сделать это, используя SOS в WinDbg.

Проблема в том, чтобы найти модули.

Если у вас все получится, есть команда "SaveModule", чтобы выгрузить модуль / сборку в файл.

Удачи:)

Другие вопросы по тегам