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

use*_*436 21 resources visual-studio-2010

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

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

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

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

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

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

Jiv*_*son 21

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

  • 这个答案是错误的,但是没有必要创建一个新的答案,因为这已经有了upvotes.您收到"重复"错误,因为VS正在生成自己的清单,然后您还在"清单工具>输入和输出>其他清单文件"下指定了您自己的清单.并且`Embed Manifest`为"No"表示您没有清单文件.正确的解决方案是将"是"嵌入您的自定义附加清单文件,而是告诉VS不要创建自己的清单.你会在`Linker> Manifest File> Generate Manifest`下找到该属性并将其设置为"No" (9认同)

Dmi*_*kin 12

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

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


hB0*_*hB0 6

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

参考


小智 2

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

我正在链接一个静态库(.lib),它有自己的版本资源 - 非常合理,它显示了库的版本。在某些电台上,我的应用程序会链接。在其他电台上,我会收到与您收到的相同的重复资源消息。

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

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

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

如果 Visual Studio 2010 仍然有此设置,请尝试强制关闭它。