【发布时间】:2018-03-06 13:21:04
【问题描述】:
我的主要 Windows 窗体(托管 C++)项目有一个类,该类显示带有可以显示或隐藏的图块的图像,以创建响应式图表。
我创建了一个单独的实用程序应用程序,它可以帮助我正确定位所有图像等。这个应用程序是用 C# 编写的,并使用以下代码 sn-p 编写一个包含图像数据和定位的 .resx 文件:
using(ResXResourceWriter resx = new ResXResourceWriter(sfd.FileName)) {
resx.AddResource("Size", canvas.Size);
List<int> IDs = canvas.IDs;
resx.AddResource("IDList", IDs);
resx.AddResource("BackgroundIndex", canvas.BackgroundIndex);
foreach(int id in IDs) {
String positionKey = String.Format("Position.id{0}", id);
String visibilityKey = String.Format("Visibility.id{0}", id);
String imageKey = String.Format("Image.id{0}", id);
resx.AddResource(imageKey, canvas.TileImage(id));
resx.AddResource(positionKey, canvas.TilePosition(id));
resx.AddResource(visibilityKey, canvas.TileVisible(id));
}
}
我可以在文本编辑器中打开 .resx 文件,看到它格式正确并且包含预期的数据。
然后我将那个 .resx 文件添加到我的主应用程序的项目中。现在我不知道如何获取其中的资源。我试过的代码是:
ResourceManager ^ image_rm = gcnew ResourceManager(
"resx_file_name_without_extension", GetType()->Assembly);
ResourceSet ^ image_rs = image_rm->GetResourceSet(
System::Globalization::CultureInfo::CurrentCulture, true, true);
在运行时,第二行(GetResourceSet 调用)抛出带有以下消息文本的 System.Resources.MissingManifestResourceException:
资源加载失败: 找不到任何适合指定文化或 中立文化。确保“resx_file_name_without_extension.resources”是 在编译时正确嵌入或链接到程序集“my_assembly”,或 所需的所有附属程序集都是可加载且完全签名的。
我怀疑我的问题是……嗯,我真的不知道。也许我没有在 ResourceManager 构造函数中使用正确的标识符。我尝试在文件属性中明确设置“从构建中排除:No”和“内容:是”,但没有效果。
是否甚至可以将外部创建的 .resx 文件放入项目中并获取其中的资源?我绝对需要编译它;我无法运送带有悬空 .resx 文件的产品。我总是可以在 .cpp 文件中创建一组静态数据对象,但 .resx 方法似乎更优雅...
【问题讨论】: