Как разрешить CVT1100 в Visual Studio 2010 Ultimate? - PullRequest
21 голосов
/ 04 августа 2010

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

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

CVTRES: фатальная ошибка CVT1100: дубликат ресурса.тип: VERSION, имя: 1, язык: 0x0407

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

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

Есть идеи у кого-нибудь?Заранее спасибо.

Ответы [ 13 ]

20 голосов
/ 29 сентября 2012

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

12 голосов
/ 16 сентября 2012

Недавно я решил аналогичную проблему с 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, так иРелиз).Для этого откройте папку «Сгенерированные файлы» в обозревателе решений, щелкните правой кнопкой мыши файл .res, откройте «Свойства», выберите «Все конфигурации» в раскрывающемся списке и установите для свойства «Исключено из сборки» раздела «Общие» значение «Да '.

Довольно утомительно каждый раз повторять эти действия руками, поэтому я написал скрипт на Python, чтобы автоматизировать это.Вы можете использовать его (на свой страх и риск!) Для обновления сгенерированных 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() для скрипта для работы в Python 2.

6 голосов
/ 28 февраля 2012

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

4 голосов
/ 21 января 2011

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

Весь текст «Ресурс» следует заменитьwith «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>

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

3 голосов
/ 09 сентября 2012

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

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

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

2 голосов
/ 04 августа 2010

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

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

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

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

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

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

1 голос
/ 09 июля 2015

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

1 голос
/ 10 ноября 2014

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

1 голос
/ 01 августа 2013

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

0 голосов
/ 10 мая 2019

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...