找不到适合指定文化的任何资源(资源文件中的C#WinForm图像)

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

{“找不到适合指定文化或中性文化的任何资源。确保在编译时将”Resource1.resources“正确嵌入或链接到程序集\”TFBIC.RCT.Monitor \“,或者全部所需的卫星assembly是可装载的并且是完全签名的。“}

// 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"); 

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

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

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

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

第一个论点是错误的。 但是,已经为您创建了ResourceManager。 您可以看到其代码:在Solution Explorer窗口中打开Properties节点,打开Resources.resx节点,然后双击Resources.Designer.cs文件。

您将使用Properties.Resources.ResourceManager获取其实例。 如果您使用Project + Properties,Resources选项卡(强烈推荐)添加了位图,您可以通过您提供的名称来引用该属性。 与Properties.Resources.circleGreen一样。 请注意,每次使用属性时都会获得一个新的图像对象,如果多次使用它,可能需要将其复制到变量中。

我也有同样的问题。 添加“DefaultNameSpace”。 (在我的情况下,“BusinessLogic”是默认命名空间)在以下行中的resourcefileName解决了我的问题之前

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

今天我在VS设计器构建的winform上遇到了同样的问题。 我已将图像添加到menuStrip的项目中:

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

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

  • 基于MS KB ,Form类必须是代码中的第一个。 这在我的代码中很好。
  • resouces文件也具有与winforms类(frmMain)相同的名称(frmMain.resx)。
  • 使用ILSpy检查创建的exe,我甚至在文件中找到了图像资源。 我追溯到的东西并不是真正理解的。
  • 我没有使用任何本地化。
  • 我创建了一个新的winform,复制了那里的所有相关部分,同样的失败。

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

改回来,现在工作正常。 🙂
但我还是不明白,资源内容如何
1)尽管命名空间错误,但仍被包含在exe中,并且
2)虽然包括在内但未找到。