Как разрешить CVT1100 в Visual Studio 2010 Ultimate?
Я работаю над проектом среднего размера, который использует qmake для создания файлов проектов Visual Studio 2005. Я пытаюсь создать его в Visual Studio 2010 Ultimate. Поскольку qmake не поддерживает эту среду IDE, у меня был предоставленный помощник преобразования, который конвертировал мое решение.
При попытке сборки я получаю следующую ошибку в одном из подпроектов:
CVTRES: фатальная ошибка CVT1100: дублирующий ресурс. Тип: ВАРИАНТ, имя: 1, язык: 0x0407
После того, как результаты Google сообщили мне, похоже, что эта ошибка может произойти при переходе на более новую версию Visual Studio, но я не знаю, почему и рекомендуемые там хаки не работают для меня.
То, что я уже пробовал, состоит в том, чтобы переименовать ressources в случайные числа, даже другое "имя" при каждом появлении информации о версии.
Когда я снова создаю проект после прочтения ошибки и удаления соответствующего .RC файла, он работает один раз. Но это слишком большая проблема.
Какие-нибудь идеи?
Спасибо заранее.
Ответы
Ответ 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" />
Когда я его удаляю, вся работа выполнена.