通过资源加载应用程序图标

时间:2010-10-14 11:51:58

标签: .net resources jscript.net

这就是我所做的:

我使用我的IDE(SharpDevelop)创建了一个resource.resx文件,并为其添加了logo.ico。 resource.resx文件看起来像这样:

<data name="logo" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
    <value>
        AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAA... (etc etc)

然后我使用ResGen.exe将此resource.resx编译为有效的resource.resources文件。

resgen.exe resource.resx resource.resources

使用命令行JScr​​ipt.NET编译器我编译了所有内容并包含了我的resource.resources,其中包含我的徽标文件。

jsc /res:resource.resources /out:app.exe /reference:UI.dll,Remote.dll app.cs

现在我想通过我的代码访问这个徽标文件,所以我得到了这个:

System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
System.Drawing.Icon icon = new System.Drawing.Icon(assembly.GetManifestResourceStream("resource.resources.logo"));

但是我得到了GetManifestResourceStream的运行时异常,它是null。

我认为这是一个命名空间问题,所以我尝试仅使用GetManifestResourceStream("resource.resources")访问资源文件,但我得到了另一个异常:

Argument 'picture' must be a picture that can be used as a Icon.

非常感谢任何想法,谢谢!

1 个答案:

答案 0 :(得分:0)

它抱怨文件格式,它不会将其识别为图标。我无法从你的片段中看出,没有足够的base64编码值可见。

我不得不说,如果这个IDE让你编写这样的代码,那么帮助你。在Visual Studio中存储资源中的图标是完全无关紧要的,根本不需要编写任何代码。 Express版的价格相同。