Mas*_*Mas 19 .net dll resources
是否可以在编译后在.NET DLL中添加/删除/更改嵌入式资源?如果是这样,这是怎么做的,有没有陷阱?
编辑:
我想手动执行此操作,但最终会自动通过构建后事件中的脚本执行此操作.
dex*_*t2k 19
它非常简单,仅需3行代码.你需要的是引用mono.cecil.dll(google it!)和:
var targetasmdef = AssemblyFactory.GetAssembly("My.dll");
//May seach for the one you need
targetasmdef.MainModule.Resources.RemoveAt(0);
AssemblyFactory.SaveAssembly(targetasmdef, "My2.dll");
Run Code Online (Sandbox Code Playgroud)
Enr*_*lio 16
在托管代码中无法执行此操作.一旦资源被嵌入,它就像编译的MSIL代码一样成为程序集的一部分.
但是,您可以手动执行此操作,如Lucero建议,使用ildasm将DLL拆分为文本文件,使用文本编辑器删除资源,最后使用ilasm重新组装DLL .
以下是使用带有单个嵌入文本文件的DLL的示例:
1)将DLL反编译为MSIL:
ildasm MyLibrary.dll /out=MyLibrary.il
Run Code Online (Sandbox Code Playgroud)
2)打开生成的MyLibrary.il
文件并删除.mresource
部分:
.mresource public MyLibrary.MyResource.txt
{
// Offset: 0x00000000 Length: 0x0000000F
// WARNING: managed resource file MyLibrary.MyResource.txt created
}
Run Code Online (Sandbox Code Playgroud)
3)从修改后的MyLibrary.il
文件中重新组装DLL :
ilasm MyLibrary.il /dll
Run Code Online (Sandbox Code Playgroud)
是的,这是可能的,通过使用ILDASM
和进行往返来ILASM
替换中间的嵌入文件.
陷阱:
归档时间: |
|
查看次数: |
14074 次 |
最近记录: |