【发布时间】:2011-10-19 01:48:56
【问题描述】:
我正在尝试使用 C# 代码替换 exe(.NET、C#)文件的资源。
我找到了this article 并制作了这段代码(使用 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;
【问题讨论】:
-
您的最终目标是什么?为什么你必须这样做而不是简单地使用设置?
-
我想在不进入 Visual Studio 的情况下更改此资源。
-
我想到了两件事。目标程序集是强名称签名或 cecil 正在破坏程序集。没有更多信息,很难说到底是什么。
-
程序集签名了吗?如果是这样,那么根据设计,这将不起作用。
标签: c# resources add edit mono.cecil