Как разрешить 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, выполните следующие действия, чтобы решить эту проблему.

  1. Откройте файл.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" />

Когда я его удалю, вся работа сделана.

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