TL; DR (如何)可以通过实际的Additional Manifest Files
GUI / props选项让Visual Studio(2010-2015)接受多个清单文件(合并)(而不是通过解决方法)?
我的C ++应用程序embeds an additional manifest file(包含私有程序集信息)通过Visual-C ++设置:Cfg Properties > Manifest Tool > Input and Output > Additional Manifest Files
正常工作。
现在,我需要在第二个清单文件中添加/合并。由于该选项被称为" Additional Manifest File_s _",这是一个多行编辑框,我尝试添加要合并的第二个文件:
VS 2015告诉我:1>LINK : fatal error LNK1104: cannot open file 'private-assem.manifest my-compat.manifest'
VS 2010告诉我:
2>private-assem.manifest my-compat.manifest : general error c1010070: Failed to load and parse the manifest. Das System kann die angegebene Datei nicht finden.
这里要注意的是,两个工具都将两个文件连接成一个,实际上,在查看命令行时,我们看到:(注意引号)
/manifest "private-assem.manifest my-compat.manifest" /verbose /out:"Debug\ConsoleApplication2.exe.embed.manifest" /nologo "Debug\ConsoleApplication2.exe.embed.manifest.res"
C:\Program Files (x86)\Microsoft Visual Studio 14.0>mt /?
Microsoft (R) Manifest Tool version 6.3.9600.17336
Copyright (c) Microsoft Corporation 2012.
All rights reserved.
Usage:
-----
mt
[ -manifest <manifest1 name> <manifest2 name> ... ]
...
请注意,清单文件选项是空格分隔,因此VS传递给mt.exe的是humbug,因为它将两个文件都包含在一个引号字符串中。
有没有办法让Additional Manifest Files
选项真正适用于多个文件?或者我做错了什么?
我可以想到以下可能的解决方法:
实际上将清单文件作为文件项添加到VS项目中:这将起作用,但是:
将多个.props
属性表组合到一个项目中时出现了实际情况,其中一个项目是私有程序集,另一个项目是应用程序兼容性声明。因此,设置不会驻留在实际项目本身,而是驻留在项目中包含的属性表中。
我还在问题中包含msbuild标记,因为我
.props
或.vcxproj
文件以使其工作答案 0 :(得分:0)
汉斯的评论出现在:
...空格不是文件分隔符。 在文件名之间加上分号。
在属性中的每个;
文件名之后添加一个seimcolon .manifest
可以解决问题。 VS / MSBuild(无论谁)将正确引用/manifest
选项。
即,而不是指定:
<ItemDefinitionGroup>
<Manifest>
<AdditionalManifestFiles>somefile.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles>
</Manifest>
</ItemDefinitionGroup>
所有属性表文件(实际上所有Additional Manifest Files
设置)都可以(并且应该)在每个文件名后附加一个分号(当只选择一个文件时也会这样做,这样就可以为多个属性表正确组合):
<AdditionalManifestFiles>somefile.manifest; %(AdditionalManifestFiles)</AdditionalManifestFiles>
^^^