Could not find any resources appropriate for the specified culture (C# WinForm Images in Resource File)

后端 未结 4 668
野趣味
野趣味 2021-01-13 07:45

I added three images to a file called Resource1.resx. I also added one string just for test purposes. I\'m getting this error on either the GetString or the GetObject(image

相关标签:
4条回答
  • 2021-01-13 08:28

    I also had the same problem. adding "DefaultNameSpace." ("BusinessLogic" is the default namespace in my case) before resourcefileName in following line resolved my problem

     public static ResourceManager rm = new ResourceManager(string.Concat("BusinessLogic." , Constants.Common.ResourceFileName), Assembly.GetExecutingAssembly());
    
    0 讨论(0)
  • 2021-01-13 08:46

    I had the same problem today on a VS-designer-built winform. I had added an image to an item of a menuStrip:

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

    Since then the same error came up. Testing with images on other controls was the same.

    • Based on MS KB, the Form class must be the first in the code. This was was fine in my code.
    • The resouces file also has the same name (frmMain.resx) as the winforms class (frmMain).
    • Checking the created exe using ILSpy, I even found the image resource in the file. Something I retrospectively don't really understand.
    • I am not using any localization.
    • I created a new winform, copied all relevant parts there, same failure.

    Somehow I finally stumbled over the "Managed Resources" entry in the project settings. The setting "resource file name" has the (default) value $(IntDir)\$(RootNamespace).$(InputName).resources... which is correct, but when I realized that the path contains the name of the namespace, I checked the namespace and found, that I had changed it (from NS_Winform to NS_assemblies) for easier import of the assemblies.

    Changed it back, working fine now. :-)
    But I still don't understand, how the resources content
    1) was included into the exe despite the wrong namespace, and
    2) not found then although included.

    0 讨论(0)
  • 2021-01-13 08:47

    Have you remembered to include the default namespace/folder when you reference the resource?

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

    If you are unsure of the correct name, load the assembly in Reflector and browse down to see what it is.

    0 讨论(0)
  • 2021-01-13 08:48

    The 1st argument is wrong. But, there is already a ResourceManager created for you. You can see its code: in the Solution Explorer window open the Properties node, open the Resources.resx node and double-click the Resources.Designer.cs file.

    You'll get its instance with Properties.Resources.ResourceManager. If you added the bitmaps with Project + Properties, Resources tab (strongly recommended), you can just refer to the property by the name you gave it. Like Properties.Resources.circleGreen. Do beware that you get a new image object each time you use the property, you may need to copy it to a variable if you use it more than once.

    0 讨论(0)
提交回复
热议问题