在.NET DLL编译完成后,是否有可能添加/删除/更改嵌入式资源?如果可以,如何操作?是否有任何需要注意的事项?
编辑:
我希望手动实现这个操作,并最终通过后期构建事件中的脚本自动化执行。
这非常简单,只需要三行代码。你需要引用mono.cecil.dll(谷歌一下!)以及:
var targetasmdef = AssemblyFactory.GetAssembly("My.dll");
//May seach for the one you need
targetasmdef.MainModule.Resources.RemoveAt(0);
AssemblyFactory.SaveAssembly(targetasmdef, "My2.dll");
ildasm MyLibrary.dll /out=MyLibrary.il
2) 打开生成的MyLibrary.il
文件并移除.mresource
部分:
.mresource public MyLibrary.MyResource.txt
{
// Offset: 0x00000000 Length: 0x0000000F
// WARNING: managed resource file MyLibrary.MyResource.txt created
}
3)根据修改后的MyLibrary.il
文件重新组装DLL:
ilasm MyLibrary.il /dll
ILDASM
和ILASM
进行往返操作,在其中替换嵌入的文件。
AssemblyFactory.GetAssembly
was removed. UseAssemblyDefinition.ReadAssembly
- PeterB