Visual C ++ - выдает необработанное исключение из установки значка формы? - PullRequest
2 голосов
/ 09 октября 2011

Я могу скомпилировать решение без ошибок, но когда я попытаюсь запустить его, я получаю окно сбоя:

An unhandled exception of type
'System.Resources.MissingManifestResourceException' occurred in mscorlib.dll

Additional information: Could not find any resources appropriate for the specified culture or the neutral culture. Make sure "<myformname>.resources" was corerctly embedded or linked into assembly "<myprojectname>" at compile time, or that all the satellite assemblies required are loaded and fully signed.

И после того, как я нажимаю кнопку «Разорвать», он выводит меня на линию:

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

Если я прокомментирую эту строку, все будет работать нормально, но в моей программе нет значка.

У кого-нибудь еще была эта проблема? Нашли решение? Я не мог найти ничего достаточно ясного для меня, чтобы понять, проблема действительно раздражает меня, единственное решение, которое я нашел, было объявить свой класс формы перед любыми другими классами, но у меня даже нет других классов в моем решении?

У меня также есть только один проект в этом решении, поддержка ms что-то говорила о наличии нескольких проектов, которых у меня нет, так что это тоже было бесполезно.

Ответы [ 2 ]

0 голосов
/ 23 декабря 2017

Не паникуйте, как я. Основной причиной проблемы является то, что скомпилированный файл ресурсов отличается от того, который запрашивается для загрузки во время выполнения. Это происходит потому, что базовый сценарий сборки не может обнаружить изменения имени файла или пространства имен , сделанные после создания формы.

Например, сначала мы запустили проект с именем x. И наш $(RootNamespace) становится x. И мы создали форму с именем y. Таким образом, наш файл ресурсов XML y.resx компилируется в x.y.resource. На этом этапе смена значка работает.

Теперь каким-то образом мы изменили имя проекта или пространство имен на z. Но наш $(RootNamespace) остается x. Хотя во время компиляции он ошибочно генерирует старый x.y.resource, но во время компоновки он связывает z.y.resource. И в этот момент смена значка не работает.

Это также может произойти, если форма находится в каком-то вложенном пространстве имен, которое неизвестно в файле проекта.

Это можно исправить, изменив вывод компиляции файла y.resx. Это можно сделать, щелкнув правой кнопкой мыши ресурс и изменив значение Resource Logical Name на $(RootNamespace).%(Filename).resources.

Я также позабочусь, чтобы ProjectName , AssemblyName и RootNamespace были одинаковыми в файле .vcxproj. Так или иначе, если форма объявлена ​​в вложенном пространстве имен, таком как RootNamespace.gui, тогда выходной файл ресурса должен быть $(RootNamespace).gui.%(Filename).resources.

0 голосов
/ 09 октября 2011

Взгляните сюда:

http://www.mztools.com/articles/2005/MZ2005007.aspx

Исключение вызвано тем, что ваш значок не может быть найден. Вероятно, вам нужно будет скомпилировать ваши ресурсы в одну .dll и поместить ее в подпапку en-US в выходных данных вашего проекта. По крайней мере, мне это удалось. Возможно, есть и другие варианты решения вашей проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...