我的应用程序在我的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开发机器上运行。
有什么想法吗?
答案 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;