У меня была такая же проблема сегодня на winform, созданной VS-дизайнером. Я добавил изображение к элементу menuStrip:
this->menuitemFileSettings->Image = (cli::safe_cast<System::Drawing::Image^>
(resources->GetObject(L"menuitemFileSettings.Image")));
С тех пор появилась та же ошибка. Тестирование с изображениями на других элементах управления было таким же.
- На основе MS KB класс Form должен быть первым в коде.
Это было нормально в моем коде.
- Файл resouces также имеет то же имя (frmMain.resx), что и класс winforms (frmMain).
- Проверяя созданный exe-файл с помощью ILSpy, я даже нашел ресурс изображения в файле. Что-то, что я ретроспективно не понимаю.
- Я не использую какую-либо локализацию.
- Я создал новую winform, скопировал все соответствующие части, тот же сбой.
Каким-то образом я, наконец, наткнулся на запись «Управляемые ресурсы» в настройках проекта. Параметр «имя файла ресурса» имеет (по умолчанию) значение $(IntDir)\$(RootNamespace).$(InputName).resources
..., что правильно, но когда я понял, что путь содержит имя пространства имен , я проверил пространство имен и обнаружил, что я изменил его (с NS_Winform на NS_assemblies) для более легкого импорта сборок.
Изменил его обратно, теперь работает нормально. : -)
Но я до сих пор не понимаю, как ресурсы контента
1) был включен в exe, несмотря на неправильное пространство имен, и
2) не найден, хотя включен.