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文件的内容,看起来我可以活着而不会被嵌入.
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中工作.
小智 2
这是一个延伸,但我在 Visual Studio 2005 下遇到了类似的问题。它可能有帮助,或者完全偏离基础:
我正在链接一个静态库(.lib),它有自己的版本资源 - 非常合理,它显示了库的版本。在某些电台上,我的应用程序会链接。在其他电台上,我会收到与您收到的相同的重复资源消息。
事实证明,它与链接器优化设置有关:“使用库依赖项输入”(UseLibraryDependencyInputs=),可能与“链接库依赖项”组合。当启用“使用库依赖项输入”时,链接器将被提供用于构建 .lib 的 .obj 和 .res 文件,而不仅仅是搜索 .lib。
问题是您不希望.lib 的 .res 文件作为链接器的输入文件。我的项目有自己的版本资源。如果您引入 .lib 的资源,那么您现在有两个版本资源,因此会出现错误。如果链接器只是搜索 .lib,它就没有理由引入 .lib 的资源,一切都很好。
我的项目的配置没有强制设置“使用库依赖项输入”,它继承了它。在某些电台上,它继承了“否”,我可以链接。在某些站上,它继承了“是”,我们得到了错误。
如果 Visual Studio 2010 仍然有此设置,请尝试强制关闭它。
| 归档时间: |
|
| 查看次数: |
19241 次 |
| 最近记录: |