我动态地生成一个.NET程序集,并使用两种不同的方法向其添加资源:
其中一个资源是一个图标(添加到程序集中的唯一图标),我希望这个图标在Windows中显示为可执行文件的默认图标。使用以下代码,资源可以很好地嵌入,并且可以访问,但不会显示为Windows Explorer中可执行文件的默认图标。
using (var writerIcon = moduleBuilder.DefineResource(nameAssembly.Name + ".Resources.IconMain", "Application resources.", ResourceAttributes.Public))
{
using (var icon = new Icon(@"Icon.ico"))
{
writerIcon.AddResource("Main.ico", icon);
}
builderAssembly.Save(@"MyPE.exe", PortableExecutableKinds.ILOnly, ImageFileMachine.I386);
}
或
using (var writer = assemblyBuilder.DefineResource(nameAssembly.Name + ".Resources.IconMain", "Application resources.", nameAssembly.Name + ".Resources.IconMain", ResourceAttributes.Public))
{
using (var icon = new Icon(@"Icon.ico"))
{
writerIcon.AddResource("Main.ico", icon);
}
builderAssembly.Save(@"MyPE.exe", PortableExecutableKinds.ILOnly, ImageFileMachine.I386);
}
我知道.NET程序集处理资源的方式与本机PE不同,但我不确定这是否相关。底线是,我看不出有什么方法可以通过代码来指定这一点。
在Visual中,您可以指定程序集图标,我希望通过托管代码(必要时通过P/Invoke )准确地实现这一点。如有任何指示,将不胜感激。
发布于 2015-03-17 01:52:09
最后,我使用了CodeDom而不是动态程序集生成。这不是个人偏好,但它通过向编译器指定参数,使我能够更好地控制资源和程序集生成选项。
https://stackoverflow.com/questions/28657362
复制相似问题