我正在尝试使用C#代码替换exe(.NET,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");
Run Code Online (Sandbox Code Playgroud)
代码实际上是删除资源,然后添加一个具有相同名称的新资源.资源名称encFile存储为encFile.exe(两者都尝试过).
我测试了代码,删除工作(我可以通过文件的大小来判断)和添加,但新文件崩溃就像我用仅删除创建的文件(用于测试) - 它就像他一样看不到被替换的资源.
我该怎么做才能解决这个问题?可能在编辑的EXE文件中有一些变化?EXE文件以这种方式读取其资源:
byte[] buffer = ProjectName.Properties.Resources.encFile;