在Windows 7上加载嵌入式资源

时间:2010-06-13 19:12:41

标签: c# .net

我的应用程序在我的WinXP机器上运行正常。但是,当我尝试在Win7机器上运行它时,无论何时尝试加载嵌入式资源,它都会失败。资源都在那里(我可以使用Reflector看到它们。)

失败的行都是以下形式:

Splash.Image = new Bitmap(typeof(ContainerForm).Assembly.GetManifestResourceStream("SplashTest.Resources.Logo.gif"));

他们都失败了,但同样的例外:

Exception='System.ArgumentException: Parameter is not valid.
  at System.Drawing.Bitmap..ctor(Stream stream)

我不明白为什么这不能在我的Win7机器上运行,而是在我常用的WinXP开发机器上运行。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

这里没有很多可能的故障模式。如果找不到资源,Assembly.GetManifestResourceStream()将返回null。这将使Bitmap构造函数失败并显示异常。那里有一点bug,它应该抛出ArgumentNullException。

Anyhoo,看起来由于某种原因,程序集不会使用XP机器上的位图资源构建。用Ildasm.exe仔细检查。双击Manifest,您应该看到.mresource,其中包含您要求的名称。

更好的鼠标陷阱是使用Project + Properties,Resources选项卡添加资源,单击Add Resource按钮上的箭头,Add Existing File并导航到该文件。然后,您可以直接通过自动生成的属性引用位图:

 Splash.Image = Properties.Resources.Logo;