Как программно заменить встроенные ресурсы в сборке .NET?C#

Место общения программистов C#
Ответить
Anonymous
 Как программно заменить встроенные ресурсы в сборке .NET?

Сообщение Anonymous »

Я пытаюсь заменить ресурс exe-файла (.NET, C#) с помощью кода C#.
Я нашел эту статью и создал этот код (используя Mono.Cecil 0.6):

Код: Выделить всё

AssemblyDefinition asdDefinition = AssemblyFactory.GetAssembly("C:\\File.exe");
EmbeddedResource erTemp = new EmbeddedResource("encFile", ManifestResourceAttributes.Public);
erTemp.Data = myNewFileBytes;
asdDefinition.MainModule.Resources.RemoveAt(0);
asdDefinition.MainModule.Resources.Add(erTemp);
AssemblyFactory.SaveAssembly(asdDefinition, "C:\\newFile.exe");
Код на самом деле удаляет ресурс, а затем добавляет новый с тем же именем.
Имя ресурса — encFile и сохраняется как encFile.exe (пробовал оба).
Я протестировал код, и удаление работает (я могу сказать по размеру файла), и добавление тоже, но новый файл аварийно завершает работу, как и файл, который я создал только с удалением (для тестирования) — он действует так, как будто он не вижу замененный ресурс.
Что можно сделать, чтобы это исправить? Может быть, какие-то изменения в редактируемом EXE-файле?
EXE-файл считывает свой ресурс так:

Код: Выделить всё

byte[] buffer = ProjectName.Properties.Resources.encFile;


Подробнее здесь: https://stackoverflow.com/questions/692 ... mmatically
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»