如何解决Visual Studio 2010 Ultimate中的CVT1100?

问题描述 投票:21回答:12

我正在研究一个使用qmake生成Visual Studio 2005项目文件的中型项目。我试图在Visual Studio 2010 Ultimate下构建它。由于qmake不支持此IDE,但我提供了转换助手转换我的解决方案。

在尝试构建时,我在其中一个子项目中收到以下错误:

CVTRES:致命错误CVT1100:重复资源。类型:版本,名称:1,语言:苏图语

在谷歌的结果告诉我之后,似乎在迁移到较新版本的Visual Studio时可能会发生此错误,但我不知道为什么以及那里推荐的黑客对我不起作用。

我已经尝试过的是将资源重命名为随机数,甚至在每次出现版本信息时都使用不同的“名称”。当我在读取错误并删除相应的.RC文件后再次构建项目时,它会工作一次。但这太糟糕了。

任何人的想法?提前致谢。

visual-studio-2010 resources
12个回答
20
投票

通过将Configuration Properties> Manifest Tool> Input and Output> Embed Manifest下的设置更改为NO,我在从VC ++ 2010迁移到2012时解决了这个问题。我不知道那是什么,但我查看了.manifest文件的内容,看起来我可以活着而不会嵌入它。


0
投票

在Dmitry Markin中替换else块,以递归方式更新所有项目文件

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)

0
投票

我来这里寻找这个错误的答案。我很抱歉爆破了泡沫。没有一个答案适合我。我的错误是我已经定义了3个具有相同ID的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**  

错误很快!!!!!!!!!!


0
投票

我有这个,我在resource.h中做了以下

#undef VS_VERSION_INFO
#define VS_VERSION_INFO                 310

由于VS_VERSION_INFO在WinRes.h中被赋予了资源ID 1,所以只需要修复我的问题。


12
投票

我最近用Qt 4.8.2和Visual Studio 2012解决了类似的问题.Qt 4.8.2不支持VS2012作为mkspec,所以我将win32-msvc2010 mkspec复制到win32-msvc2012(将_MSC_VER更改为1700)并使用了其他一些解决方法(QtWebKit修复等) - 你可以通过互联网找到它们用VS2012构建Qt 4.8.2。但是qmake并不知道VS2012 .vcxproj项目文件,所以它继续生成VS2010项目。在VS中将这些项目文件转换为新的2012格式后,出现上述错误。

解决方案是在所有配置(Debug和Release)中从构建中排除生成的.res文件。要执行此操作,请在解决方案资源管理器中打开“生成的文件”文件夹,右键单击.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
投票

如果您在编译时遇到此错误(通常是从Internet下载的项目),则删除清单文件并删除.rc文件中对清单文件的引用。

Reference


4
投票

我最近遇到了这个问题,最终导致了一个没有资源冲突的项目文件。在我的例子中,我将VS2008的QT qmake生成项目导入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>

缺少“工具名称”字段。


3
投票

如果您在编译时遇到此错误(通常是从Internet下载的项目),则删除清单文件并删除.rc文件中对清单文件的引用。

对于我遇到的情况,hB0的答案是100%正确的。

这对我非常有用,我希望其他人知道这一点,而不是假设hB0的答案应该被忽略,因为其他人有投票而hB0的票数为零。我必须在单独的答案中说出来,因为我系统不会让未注册的用户投票。我甚至注册了,以便能够对这个答案投票,但系统仍然不会让我投票,直到我是一个更成熟的用户。


2
投票

这是一个延伸,但我在Visual Studio 2005下遇到了类似的问题。它可能会有所帮助,或完全偏离基础:

我正在使用具有自己的版本资源的静态库(.lib)进行链接 - 非常合理,它显示了库的版本。在某些电台上,我的应用会链接。在其他站点,我会得到相同的重复资源消息。

事实证明它与链接器优化设置有关:“使用库依赖关系输入”(UseLibraryDependencyInputs =),可能与“链接库依赖关系”结合使用。启用“使用库依赖项输入”时,链接器将被提供用于构建.lib的.obj和.res文件,而不是仅搜索.lib。

问题是您不希望.lib的.res文件作为链接器的输入文件。我的项目有自己的版本资源。如果引入.lib的资源,则现在有两个版本资源,因此出现错误。如果链接器只是搜索.lib,它没有理由引入.lib的资源,一切都很好。

我的项目配置没有强制设置“使用库依赖项输入”,它继承了它。在某些电台上,它继承了“否”,我可以链接。在某些站点,它继承了“是”,我们得到了错误。

如果Visual Studio 2010仍具有此设置,请尝试将其强制关闭。


1
投票

我有这个问题,它通过确保从构建中排除任何包含的.rc文件来解决,除了#include其余的主.rc。


1
投票

我有这个问题,它通过确保从构建中排除任何包含的.rc文件来解决,除了#include其余的主.rc。理查德海因为我工作。我正在编译VS2013。


1
投票

我在Visual Studio C ++ 2010中遇到了类似的问题。我没有安装任何Service Pack或VS的更新,当我有两个尝试使用ICON的rc文件时出现了这个问题。所以我只是将一个文件的内容删除并将其切换到主文件中。因此,只有一个文件包含图标,第二个文件为空。像沙姆一样工作:-)。

© www.soinside.com 2019 - 2024. All rights reserved.