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