Проблема с Delphi 7 до Delphi XE2 .res

Когда я открываю проект Delphi 7 в Delphi XE2 и открываю опцию Project, я получаю сообщение об ошибке:

"Unable to set Icon: Cannot open file "........\AppName_Icon.ico".
The system cannot find the file specified".

Я также заметил, что информация о версии проекта отсутствует. В проекте Delphi 7 есть файл.Res, в котором хранится MAINICON и информация о версии. Почему Delphi XE2 не может использовать этот файл.Res для получения информации MAINICON & Version.

Также, если я пытаюсь скомпилировать приложение в XE2, я получаю сообщение об ошибке -

[BRCC32 Error] MtxReq.vrc(2): file not found: MtxReq_Icon.ico

Файл MTXReq.vrc (новый файл) будет создан, а файл MtxReq.res удален.

Почему это происходит? Я не хочу терять значок своего проекта и настройки версии из файла.res.

Есть ли способ заставить XE2 использовать файл.res и не удалять его?

Любая помощь будет оценена.


Извините, я пока не могу оставить комментарий (нужно больше точек репутации) ...

Уоррен - вот ответ на ваш вопрос (не было бы быстрее удалить ваш файл.dproj и сохранить только.dpr, быстрее?)

Я удалил.dproj, .dproj.local Открыл.dpr в XE2, и он заново создал файл.dproj. Он вернул иконку из.res, но я потерял информацию о версии проекта. Только информация о версии файла и версии продукта была перенесена, но потеряла всю другую информацию о версии. (Это из-за файла манифеста по умолчанию) . Затем я попробовал то, что я объяснил в шаге 1 моего решения. Я открываю файл.dproj в блокноте, удаляю записи тегов и снова открываю файл.dproj, и вся моя информация о версии теперь восстанавливается. Проблема здесь заключается в $(BDS)\bin\default_app.manifest. Также я заметил, что информация о версии хранится в теге под тегом в файле.dproj, и как только вы удаляете записи манифеста по умолчанию, IDE правильно выбирает информацию ключа версии из.

Поэтому, в основном, удалив файл.dpr, я пропустил этап извлечения и добавления файла.ico в проект, но мне пришлось отредактировать только что созданный файл.proj и удалить записи для манифеста по умолчанию, чтобы получить информацию о версии. (другое решение было бы вручную добавить информацию о версии и сохранить проект. Я не пробовал это)

3 ответа

Решение

Обновление 2015: Идея Реми по тщательному воссозданию файлов.DPROJ - отличный совет, и его следует рассмотреть в первую очередь, даже если мой ответ помечен как принятый.

В версиях Delphi, предшествующих XE2, файлы ресурсов использовались как INPUT и OUTPUT в процессе компиляции. Например, значок проекта Delphi 7 встроен в этот файл.res, который вы "хотите использовать в delphi xe2", однако в delphi 7 это проблематично, а теперь в XE2 это невозможно. Вместо этого вы теперь рассматриваете файл.res как чистый выходной артефакт, такой же, как исполняемые файлы. Не беспокойтесь о проверке файлов.res в системе управления версиями и не пытайтесь делать вид, что файл.res - это место, где вы постоянно храните свои значки. Это выходной файл, автоматически сгенерированный компилятором, как и должно быть.

Если вы современный разработчик, старый способ работы Delphi 7, возможно, раздражал вас (это наверняка раздражало меня), потому что у вас есть интересный и неразрешимый вопрос о том, что делать для контроля версий: проверяете ли вы файл.RES или не не так ли? У обоих подходов были недостатки, и тот факт, что файлы.RES теперь являются выходными артефактами только в XE2, является лучшим. Так что учись жить с этим.

Теперь, когда XE2 поддерживает значки не только для ПК, но и для Mac, он должен обрабатывать вещи по-другому, и они это убрали. Это источник проблемы, которую вы видите с файлом.ICO. Я видел точно такую ​​же ошибку, и я проигнорировал ее, и просто добавил значок обратно в проект после того, как он был преобразован в противном случае.

Преобразование проекта Delphi 7 (.dpr и.cfg) в Delphi XE2 не такая большая проблема, как преобразования между различными уровнями файлов.dproj - каждая версия, начиная с Delphi 2005,2007,2009,2010, и далее реализована изменения в формате dproj. Когда возникают проблемы с преобразованием этих проектов, я делаю не так, как предлагает Реми, потому что это пустая трата времени. Что я делаю, это УДАЛЯЮ DPROJ и позволяю ему конвертировать только из файла.dpr.
Но совет Реми начинать с нуля имеет много преимуществ, в том числе то, что вы можете упростить макет своего проекта.

В любом случае, вот что вы делаете:

  1. Игнорировать ошибку
  2. Добавьте значок, чтобы спроектировать себя.
  3. Продолжайте весело и не беспокойтесь об удалении файла.res, это намеренно и по уважительным причинам. Новый будет создан при необходимости. Имя файла.ico на диске будет прочитано с использованием содержимого файла XE2 .dproj и скомпилировано в файл.res, как и должно быть.

Как всегда, вы НИКОГДА не должны позволять IDE преобразовывать проект из более старой версии в более новую. Преобразование редко работает правильно. Вы должны ВСЕГДА создавать новый проект в новой IDE, а затем добавлять в него существующие исходные файлы по мере необходимости.

Спасибо всем за ваш вклад и предложения.

После того, как я отправил свое сообщение, я попытался выполнить следующие действия для решения проблемы.ico, а проблемы с отсутствующей версией / информацией о версии перенесены:

Шаг 1 Отредактировал файл.dProj и удалил ссылку на связанные с default_app.manifest записи под тегом (платформа моего проекта 32-разрядная). Я удалил все теги под этим тегом, кроме тега, относящегося к пространству имен System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)

Без этого мое приложение всегда показывало информацию о версии как 1.0.0.0 и игнорировало все остальное, что я указал.

(Я не уверен, что это правильный шаг, но это решило мою проблему с информацией о версии. Может быть более простое / другое решение для этого...)

Шаг 2. Извлеките ico из старого файла.res, назовите его и добавьте этот файл.ico в проект из опций проекта. физический файл.ico является папкой проектов и будет проверен в системе контроля версий (в моем случае VSS).

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

Это было намного проще, чем полная конвертация / миграция, которую я должен был сделать для своих приложений из D7 в XE2 - конвертация в Unicode, миграция настроенных компонентов Raize 5 в Raize 6, Turbo Power, Virtual Tree View, Hypergrid и т. Д. И т. Д. И т. Д. И т. Д.... К счастью, я нашел версии XE2 всех этих компонентов.

Другие вопросы по тегам