Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

byte[] dllAsArray;

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

    formatter.Serialize(stream, results.CompiledAssembly);

    dllAsArray = stream.ToArray();
}

Ответ 2

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

Тем не менее, однако, что dll действительно сохраняется на диске в некоторой временной папке на короткое время (пока он работает или что-то еще...), потому что так работает компилятор С# (работает?).

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

Ответ 3

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

Проблема заключается в нахождении модулей.

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

Удачи:)