Подтвердить что ты не робот

Как разрешить CVT1100 в Visual Studio 2010 Ultimate?

Я работаю над проектом среднего размера, который использует qmake для создания файлов проектов Visual Studio 2005. Я пытаюсь создать его в Visual Studio 2010 Ultimate. Поскольку qmake не поддерживает эту среду IDE, у меня был предоставленный помощник преобразования, который конвертировал мое решение.

При попытке сборки я получаю следующую ошибку в одном из подпроектов:

CVTRES: фатальная ошибка CVT1100: дублирующий ресурс. Тип: ВАРИАНТ, имя: 1, язык: 0x0407

После того, как результаты Google сообщили мне, похоже, что эта ошибка может произойти при переходе на более новую версию Visual Studio, но я не знаю, почему и рекомендуемые там хаки не работают для меня.

То, что я уже пробовал, состоит в том, чтобы переименовать ressources в случайные числа, даже другое "имя" при каждом появлении информации о версии. Когда я снова создаю проект после прочтения ошибки и удаления соответствующего .RC файла, он работает один раз. Но это слишком большая проблема.

Какие-нибудь идеи? Спасибо заранее.

4b9b3361

Ответ 1

Я решил эту проблему при переходе с VС++ 2010 на 2012, изменив параметр в разделе "Свойства конфигурации" > "Инструмент манифеста" > "Ввод и вывод" > "Вставить манифест" в НЕТ. Я понятия не имею, что это такое, но я просмотрел содержимое файла .manifest, и он уверен, что я могу жить без его внедрения.

Ответ 2

Недавно я решил аналогичную проблему с Qt 4.8.2 и Visual Studio 2012. Qt 4.8.2 не поддерживает VS2012 как mkspec, поэтому я скопировал win32-msvc2010 mkspec в win32-msvc2012 (меняя _MSC_VER на 1700) и использовали некоторые другие обходные пути (исправление QtWebKit и т.д. - вы можете найти их через Интернет), чтобы построить Qt 4.8.2 с VS2012. Но qmake не знал о файлах VS2012 .vcxproj, поэтому он продолжал генерировать проекты VS2010. После преобразования этих файлов проекта в новый формат 2012 года в VS возникла ошибка выше.

Решение должно было исключать сгенерированные файлы .res из сборки во всех конфигурациях (как Debug, так и Release). Для этого откройте папку "Сгенерированные файлы" в обозревателе решений, щелкните правой кнопкой мыши файл .res, откройте "Свойства", выберите "Все конфигурации" из раскрывающегося списка и установите свойство "Исключено из сборки" раздела "Общие" в раздел ' Да.

Весьма утомительно повторять эти действия руками каждый раз, поэтому я написал Python script для автоматизации этого. Вы можете использовать его (на свой страх и риск!) Для обновления созданных qmake файлов .vcxproj.

    import sys
    import os
    from xml.etree import ElementTree

    def updateProject(filename):

        def getXmlns(tag):
            return tag[1:].split('}')[0]

        tree = ElementTree.parse(filename)
        root = tree.getroot()
        xmlns = getXmlns(root.tag)
        for cb in root.iter('{' + xmlns + '}CustomBuild'):
            if(not 'Include' in cb.attrib):
                continue
            if(not cb.attrib['Include'].endswith('.res')):
                continue
            for excl in cb.iter('{' + xmlns + '}ExcludedFromBuild'):
                if('Condition' in excl.attrib):
                    del excl.attrib['Condition'] # delete ExcludedFromBuild condition
        ElementTree.register_namespace('', xmlns)
        tree.write(filename)

    if(len(sys.argv)>=2): # use project files specified in command line:
        for i in range(1, len(sys.argv)):
            updateProject(sys.argv[i])
    else: # update all project files in current directory:
        for filename in os.listdir(os.getcwd()):
            if(filename.endswith('.vcxproj')):
                updateProject(filename)

Благодаря Xandy за то, что вам нужно передать рабочий каталог на listdir() для script для работы в Python 2.

Ответ 3

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

Ссылка

Ответ 4

Недавно я столкнулся с этой проблемой и случайно попал в файл проекта, у которого не было конфликта ресурсов. В моем случае я импортировал созданный QT qmake проект для 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>

Поле "Имя инструмента" отсутствует.

Ответ 5

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

Этот ответ hB0 был на 100% правильным для случая, с которым я столкнулся.

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

Ответ 6

Это растяжка, но у меня была аналогичная проблема в Visual Studio 2005. Это может помочь или полностью отказаться от базы:

Я связывался со статической библиотекой (.lib), у которой есть свой собственный ресурс версии - очень разумно, это показывает версию библиотеки. На некоторых станциях мое приложение будет связываться. На других станциях я получаю то же дублирующее сообщение ресурса, которое у вас есть.

Оказалось, что это связано с настройкой оптимизации компоновщика: "Использовать вкладки зависимостей библиотеки" (UseLibraryDependencyInputs =), возможно, в сочетании с "Зависимости библиотеки ссылок". Когда "Использовать вкладки зависимостей библиотеки" было включено, компоновщик был загружен файлами .obj и .res, которые были использованы для сборки .lib, вместо того, чтобы просто искать .lib.

Проблема заключается в том, что вы не хотите, чтобы файл .lib.res был входным файлом в компоновщик. Мой проект имеет собственный ресурс. Если вы ввели ресурсы .lib, теперь у вас есть два ресурса версии, следовательно, ошибка. Если компоновщик просто ищет .lib, у него нет причин для добавления ресурса .lib, и все хорошо.

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

Если Visual Studio 2010 все еще имеет этот параметр, попробуйте отключить его.

Ответ 7

У меня была эта проблема, и она была решена путем обеспечения того, чтобы любые включенные .rc файлы были исключены из сборки, кроме основного .rc, который был #including остальных.

Ответ 8

У меня была эта проблема, и она была решена путем обеспечения того, чтобы любые включенные .rc файлы были исключены из сборки, за исключением основного .rc, который был #including остальных. Ричард Хейн работал у меня. Я компилировался с VS2013.

Ответ 9

У меня была аналогичная проблема в Visual Studio С++ 2010. Я не установил никаких пакетов обновлений или обновлений VS, и эта проблема возникает, когда у меня было два файла rc, которые пытались использовать ICON. Поэтому я просто взял содержимое одного файла и разрезал его в основной файл. Таким образом, только один файл содержит ICONS, а второй файл пуст. Работает как шарм: -).

Ответ 10

Заменить еще блок в комментарии Дмитрия Маркина, чтобы рекурсивно обновить все файлы проекта

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)

Ответ 11

Я пришел сюда, чтобы найти ответ на эту ошибку. Я сожалею, что вырвал пузырь. Ни один из ответов не был разработан для меня. Моя ошибка заключалась в том, что я определил 3 MACRO с тем же идентификатором. Именно по этой причине я получил ошибку, упомянутую в вопросе.

мой код до появления ошибки:

#define IDB_MARKER_NORMAL_LINE          21**6**   
#define IDB_MARKER_ARROW_LINE           21**6**   
#define IDB_MARKER_DOTTED_LINE          21**6**  

i изменил его на:

#define IDB_MARKER_NORMAL_LINE          21**6**   
#define IDB_MARKER_ARROW_LINE           21**7**   
#define IDB_MARKER_DOTTED_LINE          21**8**  

Ошибки были GONE!!!!!!!!!!

Ответ 12

У меня было это, и я сделал следующее в resource.h

#undef VS_VERSION_INFO
#define VS_VERSION_INFO                 310

Поскольку VS_VERSION_INFO получает идентификатор ресурса 1 в WinRes.h, я просто исправил эту проблему.

Ответ 13

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

Этот ответ от hB0 был на 100% правильным для случая, с которым я столкнулся.

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

Этот ответ указывает на способ найти проблему, с которой я столкнулся. В моем senario, реквизиты для импорта имеют такой код:

<ResourceCompile Include="$(VersioningDir)**Version.rc" />

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