Как сохранить динамически сгенерированную сборку, которая хранится в памяти?
Я хочу получить сборку, сохранив ее на диск или отразив во время выполнения. Сборка динамически генерируется в памяти третьей стороной.
Кто-нибудь знает как это сделать?
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", чтобы выгрузить модуль / сборку в файл.
Удачи:)