Как программно заменить встроенные ресурсы в сборке .NET? - PullRequest
16 голосов
/ 03 августа 2011

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

Я нашел эту статью и создал этот код (используя Mono.Cecil0.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;

1 Ответ

4 голосов
/ 23 сентября 2011

попробуйте проверить приведенную ниже статью проекта кода, это может быть полезно

http://www.codeproject.com/KB/dotnet/embeddedresources.aspx

...