【问题标题】:Could not find any resources appropriate for the specified culture (C# WinForm Images in Resource File)找不到适合指定区域性的任何资源(资源文件中的 C# WinForm 图像)
【发布时间】:2009-12-17 19:19:29
【问题描述】:

我将三个图像添加到一个名为 Resource1.resx 的文件中。我还添加了一个字符串仅用于测试目的。我在 GetString 或 GetObject(image-name) 上收到此错误。

{"找不到任何资源 适用于指定的文化 或中立文化。确保 \"Resource1.resources\" 是正确的 嵌入或链接到程序集中 \"TFBIC.RCT.Monitor\" 在编译时, 或者所有的卫星组件 required 是可加载且完全的 签名。"}

    // get initial images 
ResourceManager rm = new ResourceManager(
    "Resource1",System.Reflection.Assembly.GetExecutingAssembly());
CultureInfo ci = Thread.CurrentThread.CurrentCulture;


string strTest = rm.GetString("String1");  // just testing 

Bitmap bmCircleGreen = (Bitmap)rm.GetObject("circleGreen");      
Bitmap bmCircleYellow = (Bitmap)rm.GetObject("circleYellow");      
Bitmap bmCircleRed = (Bitmap)rm.GetObject("circleRed");  

我的表单是我项目中的第一个类(我已经看到了那个错误)。
我为我的项目分配了一个强键无济于事。
不知道还能尝试什么。

【问题讨论】:

  • 这个answer为我解决了这个问题! GetGlobalResourceObject

标签: c# winforms


【解决方案1】:

您是否记得在引用资源时包含默认命名空间/文件夹?

ResourceManager rm = new ResourceManager("DefaultNamespace.Folder.ResourceName");

如果您不确定正确的名称,请在 Reflector 中加载程序集并向下浏览以查看它是什么。

【讨论】:

  • 这不是“记住”的概念,而是“知道”的概念。我从未在我找到的任何示例中看到命名空间。
  • 您还应该能够像 nobugz 提到的那样以静态方式获得强类型:FolderName.ResourceFileName.YourResourceName
【解决方案2】:

第一个参数是错误的。但是,已经为您创建了一个 ResourceManager。您可以看到它的代码:在解决方案资源管理器窗口中打开 Properties 节点,打开 Resources.resx 节点并双击 Resources.Designer.cs 文件。

您将通过Properties.Resources.ResourceManager 获得它的实例。如果您使用“项目 + 属性”、“资源”选项卡(强烈推荐)添加位图,则可以通过您给它的名称来引用该属性。喜欢Properties.Resources.circleGreen。请注意,每次使用该属性时都会得到一个 new 图像对象,如果多次使用它,可能需要将其复制到变量中。

【讨论】:

  • 我发现了这个:内部静态全局::System.Resources.ResourceManager ResourceManager。这就是你说的。不知道如何使用它。因为它是静态的,所以我尝试了“ResourceManager.getObject”...但是没有用。
  • 对不起,我又看了你的帖子,它起作用了:Bitmap bmCircleGreen = (Bitmap) Properties.Resources.ResourceManager.GetObject("circleGreen");
【解决方案3】:

我也遇到了同样的问题。添加“默认名称空间”。 (在我的例子中,“BusinessLogic”是默认命名空间)在下一行的 resourcefileName 解决我的问题之前

 public static ResourceManager rm = new ResourceManager(string.Concat("BusinessLogic." , Constants.Common.ResourceFileName), Assembly.GetExecutingAssembly());

【讨论】:

    【解决方案4】:

    我今天在 VS-designer 构建的 winform 上遇到了同样的问题。我已将图像添加到 menuStrip 的一项:

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

    从那时起,同样的错误出现了。在其他控件上使用图像进行测试是相同的。

    • 基于MS KB,Form 类必须是代码中的第一个。 这在我的代码中很好。
    • 资源文件也与 winforms 类 (frmMain) 同名 (frmMain.resx)。
    • 使用ILSpy检查创建的exe,我什至在文件中找到了图像资源。事后我还不太明白。
    • 我没有使用任何本地化。
    • 我创建了一个新的 winform,在那里复制了所有相关部分,同样失败。

    不知何故,我终于偶然发现了项目设置中的 “托管资源” 条目。设置 "resource file name" 具有(默认)值 $(IntDir)\$(RootNamespace).$(InputName).resources... 这是正确的,但是当我意识到 路径包含命名空间的名称 ,我检查了命名空间,发现我已经更改了它(从 NS_Winform 到 NS_assemblies)以便于导入程序集。

    改回来了,现在可以正常使用了。 :-)
    但我还是不明白,资源内容如何
    1) 尽管命名空间错误,但仍包含在 exe 中,并且
    2) 虽然包括在内,但没有找到。

    【讨论】:

    • 谢谢,由于这个问题的年龄,我不再从事该项目,无法验证。
    • 我非常清楚这一点。我添加了我的答案也是为了帮助其他用户。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 2014-10-08
    • 2012-12-02
    • 2011-06-09
    • 2012-02-14
    相关资源
    最近更新 更多