Visual C ++ - 从设置表单图标中抛出未处理的异常?

问题描述 投票:2回答:2

我可以编译解决方案没有错误,但当我尝试运行它时,我得到一个崩溃窗口:

An unhandled exception of type
'System.Resources.MissingManifestResourceException' occurred in mscorlib.dll

Additional information: Could not find any resources appropriate for the specified culture or the neutral culture. Make sure "<myformname>.resources" was corerctly embedded or linked into assembly "<myprojectname>" at compile time, or that all the satellite assemblies required are loaded and fully signed.

在我按下Break之后它会把我扔到线上:

this->Icon = (cli::safe_cast<System::Drawing::Icon^  >(resources->GetObject(L"$this.Icon")));

如果我评论这一行,一切正常,但我的程序没有图标。

还有其他人有这个问题吗?找到了解决方案?我找不到任何清楚的东西让我理解,问题真的很烦我,只有我发现的解决方案是在任何其他类之前声明我的表单类,但我的解决方案中甚至没有任何其他类?

我在这个解决方案中也只有一个项目,ms支持说了一些关于有多个项目的东西,我没有,所以它也没用。

c++ windows forms exception icons
2个回答
0
投票

看看这里:

http://www.mztools.com/articles/2005/MZ2005007.aspx

抛出异常是因为无法找到您的图标。您可能需要在一个.dll下编译资源,并将其放在项目输出的en-US子文件夹下。它至少对我有用。您的问题可能还有其他解决方案。


0
投票

不要像我一样恐慌。问题的根本原因是编译的资源文件与要求在运行时加载的资源文件不同。发生这种情况是因为底层构建脚本无法检测创建表单后所做的文件名或命名空间更改。

例如,起初我们开始了一个名为x的项目。而我们的$(RootNamespace)变成了x。我们创建了一个名为y的表单。所以我们的XML资源文件y.resx被编译成x.y.resource。此时图标更改有效。

现在我们以某种方式将项目名称或命名空间更改为z。但我们的$(RootNamespace)仍然是x。虽然在编译时它错误地生成旧的x.y.resource,但在链接时它链接z.y.resource。此时图标更改不起作用。

如果表单位于项目文件中未知的某个嵌套命名空间下,也会发生这种情况。

可以通过更改y.resx文件的编译输出来修复它。可以通过右键单击资源并将Resource Logical Name更改为$(RootNamespace).%(Filename).resources来完成。

我还将确保在.vcxproj文件中ProjectName,AssemblyName和RootNamespace是相同的。不知何故,如果表单是在像RootNamespace.gui这样的嵌套命名空间下声明的,那么资源的输出文件应该是$(RootNamespace).gui.%(Filename).resources

© www.soinside.com 2019 - 2024. All rights reserved.