Как разрешить CVT1100 в Visual Studio 2010 Ultimate?
Я работаю над проектом среднего размера, который использует qmake для генерации файлов проекта Visual Studio 2005. Я пытаюсь построить его под Visual Studio 2010 Ultimate. Так как qmake еще не поддерживает эту IDE, у меня был предоставленный помощник по конвертации, который конвертировал мое решение.
При попытке собрать я получаю следующую ошибку в одном из подпроектов:
CVTRES: фатальная ошибка CVT1100: дублированный ресурс. Тип: ВАРИАНТ, имя:1, язык:0x0407
После того, что результаты Google сказали мне, кажется, что эта ошибка, вероятно, произойдет при переходе на более новую версию Visual Studio, но я не знаю почему, и рекомендованные там хаки не работают для меня.
Я уже пытался переименовывать ресурсы в случайные числа, даже разные "имена" при каждом появлении информации о версии. Когда я снова строю проект после прочтения ошибки и удаления соответствующего.RC-файла, он работает один раз. Но это слишком много взломать.
Любые идеи кто-нибудь? Заранее спасибо.
12 ответов
Я решил эту проблему при переходе с VC++ 2010 на 2012 год, изменив настройку в разделе "Свойства конфигурации"> "Инструмент манифеста"> "Ввод и вывод"> "Встроить манифест" в значение " НЕТ". Я понятия не имею, о чем это все, но я посмотрел на содержание .manifest
файл, и это, конечно, похоже, что я могу жить без его внедрения.
Недавно я решил похожую проблему с Qt 4.8.2 и Visual Studio 2012. Qt 4.8.2 не поддерживает VS2012 как mkspec, поэтому я скопировал win32-msvc2010
Макспек к win32-msvc2012
(изменение _MSC_VER
до 1700) и использовал некоторые другие обходные пути (исправление QtWebKit и т. д. - вы можете найти их через Интернет) для сборки Qt 4.8.2 с VS2012. Но qmake не знал о VS2012 .vcxproj
файлы проекта, поэтому он продолжал генерировать проекты VS2010. После преобразования этих файлов проекта в новый формат 2012 в VS возникла вышеуказанная ошибка.
Решение было исключить сгенерированный .res
файлы из сборки во всех конфигурациях (как Debug, так и Release). Для этого откройте папку "Сгенерированные файлы" в Solution Explorer, щелкните правой кнопкой мыши .res
файл, откройте Свойства, выберите "Все конфигурации" из выпадающего списка и установите для свойства "Исключено из сборки" раздела "Общие" значение "Да".
Довольно утомительно каждый раз повторять эти действия руками, поэтому я написал скрипт на Python, чтобы автоматизировать это. Вы можете использовать его (на свой страх и риск!) Для обновления сгенерированного qmake .vcxproj
файлы.
импорт системы импорт ОС из xml.etree импортировать ElementTree def updateProject(имя файла): def getXmlns(tag): возвращаемый тег [1:].split('}')[0] tree = ElementTree.parse(имя файла) root = tree.getroot() xmlns = getXmlns(root.tag) для cb в root.iter('{' + xmlns + '}CustomBuild'): если (не "Включить" в cb.attrib): Продолжить если (не cb.attrib['Включить']. заканчивается с ('.res')): Продолжить для excl в cb.iter('{' + xmlns + '}Excluded From Build'): if('Condition' в excl.attrib): del excl.attrib['Condition'] # delete условие Excluded From Build ElementTree.register_namespace('', xmlns) tree.write(имя файла) if(len(sys.argv)>=2): # использовать файлы проекта, указанные в командной строке: для i в диапазоне (1, len(sys.argv)): updateProject(sys.argv[I]) еще: # обновить все файлы проекта в текущем каталоге: для имени файла в os.listdir(os.getcwd()): если (filename.endswith('vcxproj')): updateProject(имя файла)
Спасибо Xandy за указание на то, что вам нужно передать рабочий каталог listdir()
для скрипта для работы в Python 2.
Если вы когда-либо сталкивались с этой ошибкой при компиляции (обычно это загруженный проект из Интернета), удалите файл манифеста и удалите ссылку на файл манифеста в файле.rc.
Недавно я столкнулся с этой проблемой, и случайно оказался файл проекта, который не имел конфликта ресурсов. В моем случае я импортировал сгенерированный QT qkeke проект для VS2008 в VS2010. После использования VcprojFormatter и большого количества различий я нашел разницу (для меня). Я думаю, что это ошибка либо в мастере импорта, либо в ядре VS 2010.
http://www.codeproject.com/KB/macros/vcproj_formatter.aspx
Мой файл ресурсов назывался win32_resources.rc. Вам нужно будет отредактировать каждую промежуточную папку данных, соответствующую вашей конфигурации сборки (выпуск, отладка и т. Д.)
Найдите в вашем файле vcxproj следующий раздел:
<ItemGroup>
<Resource Include="debug\win32_resources.res">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</Resource>
<Resource Include="release\win32_resources.res">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
</Resource>
</ItemGroup>
Весь текст "Ресурс" должен быть заменен на "CustomBuildStep":
<ItemGroup>
<CustomBuildStep Include="debug\win32_resources.res">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
</CustomBuildStep>
<CustomBuildStep Include="release\win32_resources.res">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
</CustomBuildStep>
</ItemGroup>
Проблема в файле VS2008 заключается в том, что настройка по умолчанию (?) Не была явной:
<File RelativePath="release\win32_resources.res">
<FileConfiguration
Name="Debug|Win32"
ExcludedFromBuild="true"
>
<Tool Name="VCCustomBuildTool"/>
</FileConfiguration>
</File>
Поле "Имя инструмента" отсутствует.
Если вы когда-либо сталкивались с этой ошибкой при компиляции (обычно это загруженный проект из Интернета), удалите файл манифеста и удалите ссылку на файл манифеста в файле.rc.
Этот ответ от hB0 был на 100% правильным для случая, с которым я столкнулся.
Это было очень полезно для меня, и я хотел бы, чтобы другие узнали об этом, а не предполагали, что ответ hB0 следует игнорировать, потому что у других есть голоса, а у hB0 - ноль голосов. Я должен сказать это в отдельном ответе, потому что я не позволю незарегистрированному пользователю голосовать. Я даже зарегистрировался, чтобы иметь возможность голосовать за этот ответ, но система все равно не позволит мне голосовать, пока я не стану более зрелым пользователем.
Это растянуто, но у меня была похожая проблема в Visual Studio 2005. Это могло бы помочь, или быть полностью неосновным:
Я связывался со статической библиотекой (.lib), которая имеет собственный ресурс версии - очень разумно, он показывает версию библиотеки. На некоторых станциях мое приложение будет ссылаться. На других станциях я получу то же самое дубликатное сообщение ресурса, которое вы получили.
Оказалось, что это связано с настройкой оптимизации компоновщика: "Использовать входы зависимостей библиотеки" (UseLibraryDependencyInputs=), возможно, в сочетании с "Зависимостями библиотеки ссылок". Когда был включен "Использовать входы зависимостей библиотеки", компоновщик передавал файлы.obj и.res, которые использовались для создания.lib, вместо простого поиска в.lib.
Проблема в том, что вы не хотите, чтобы.lib файл.res был входным файлом для компоновщика. У моего проекта есть собственный ресурс версии. Если вы введете ресурсы.lib, у вас теперь есть два ресурса версии, отсюда и ошибка. Если компоновщик просто ищет файл.lib, у него нет причин вводить ресурс.lib, и все хорошо.
Конфигурация моего проекта не вызвала установку "Использовать входы зависимостей библиотеки", она унаследовала его. На некоторых станциях он унаследовал "Нет", и я мог связать. На некоторых станциях он унаследовал "Да", и мы получили ошибку.
Если Visual Studio 2010 все еще имеет этот параметр, попробуйте отключить его.
У меня была эта проблема, и она была решена путем обеспечения того, чтобы все включенные файлы.rc были исключены из сборки, кроме основного.rc, который был #inc включая остальные.
У меня была похожая проблема в Visual Studio C++ 2010. Я не установил никаких пакетов обновления или обновлений VS, и эта проблема возникает, когда у меня было два файла rc, которые пытались использовать ICON. Поэтому я просто взял содержимое одного файла и вырезал его в основной файл. Таким образом, только один файл содержит иконки, а второй файл пуст. Работает как шарм:-).
У меня была эта проблема, и она была решена путем обеспечения того, чтобы все включенные файлы.rc были исключены из сборки, кроме основного.rc, который был #inc включая остальные. Ричард Хейн работал на меня. Я компилировал с VS2013.
У меня было это, и я сделал следующее в resource.h
#undef VS_VERSION_INFO
#define VS_VERSION_INFO 310
Поскольку VS_VERSION_INFO получает идентификатор ресурса 1 в WinRes.h, я просто исправил эту проблему.
Если вы когда-либо сталкивались с ошибками ресурсов CVT1100 (повторяющийся ресурс) и LNK1123 (сбой при преобразовании в COFF) в Visual Studio 20XX, выполните следующие действия, чтобы решить эту проблему.
Откройте файл.rc и прокомментируйте / удалите под МАКРОМ
ПОДВИЖНЫЙ ЧИСТЫЙ "res\.manifest"
2 Переименуйте / удалите файл манифеста из папки ресурсов из каталога проекта.
Теперь перестройте решение и наслаждайтесь...
Замените еще блок в ответе Дмитрия Маркина, чтобы рекурсивно обновить все файлы проекта.
else: # recursively update all project files in current directory:
rootdir = os.getcwd()
for root, subFolders, files in os.walk(rootdir):
for filename in files:
if(filename.endswith('.vcxproj')):
filePath = os.path.join(root, filename)
print "file: %s" % (filePath)
updateProject(filePath)
Я пришел сюда в поисках ответа на эту ошибку. Мне жаль разрывать пузырь. Ни один из ответов не сработал для меня. Моя ошибка была в том, что я определил 3 MACRO с одинаковым идентификатором. Вот почему я получил ошибку, упомянутую в вопросе.
мой код раньше, когда ошибка показывала:
#define IDB_MARKER_NORMAL_LINE 21**6**
#define IDB_MARKER_ARROW_LINE 21**6**
#define IDB_MARKER_DOTTED_LINE 21**6**
я изменил это на:
#define IDB_MARKER_NORMAL_LINE 21**6**
#define IDB_MARKER_ARROW_LINE 21**7**
#define IDB_MARKER_DOTTED_LINE 21**8**
Ошибки ушли!!!!!!!!!!
Если вы когда-нибудь столкнетесь с этой ошибкой при компиляции (обычно это загруженный проект из Интернета), удалите файл манифеста и удалите ссылку на файл манифеста в файле.rc.
Этот ответ hB0 был на 100% правильным для случая, с которым я столкнулся.
Это было очень полезно для меня, и я хотел бы, чтобы другие извлекли пользу из этого, а не предполагали, что ответ hB0 следует игнорировать, потому что у других есть голоса, а у hB0 - ноль голосов. Я должен сказать это в отдельном ответе, потому что система не позволит незарегистрированному пользователю голосовать. Я даже зарегистрировался, чтобы иметь возможность проголосовать за этот ответ, но система по-прежнему не позволяет мне голосовать, пока я не стану более зрелым пользователем.
Этот ответ указывает способ найти указанную мной проблему. В моем сенарио у реквизита импорта есть этот код:
<ResourceCompile Include="$(VersioningDir)**Version.rc" />
Когда я его удалю, вся работа сделана.