TL; DR(How)是否可以通过实际的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
选项实际上适用于多个文件?或者我做错了什么?
我可以想到以下可能的解决方法:
.props
属性表组合到一个项目中时出现了实际情况,其中一个编译了私有程序集,另一个编译了应用程序兼容性声明。因此,设置不会驻留在实际项目本身上,而是驻留在项目中包含的属性表中。我也在问题中包括msbuild标签,就像我一样
.props
or .vcxproj
文件来完成这项工作汉斯的评论是:
...空格不是文件分隔符。在文件名之间加上分号。
在属性中的每个;
文件名后添加seimcolon .manifest
就可以了。 VS / MSBuild(无论谁)将正确引用/manifest
option。
也就是说,而不是指定:
<ItemDefinitionGroup>
<Manifest>
<AdditionalManifestFiles>somefile.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles>
</Manifest>
</ItemDefinitionGroup>
所有属性表文件(实际上所有Additional Manifest Files
设置)都可以(并且应该)在每个文件名后附加一个分号(当仅选择一个文件时也会这样做,以便它可以正确地组合多个属性表):
<AdditionalManifestFiles>somefile.manifest; %(AdditionalManifestFiles)</AdditionalManifestFiles>
^^^