Visual-Studio Manifest Tool不接受多个附加清单文件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Visual-Studio Manifest Tool不接受多个附加清单文件?相关的知识,希望对你有一定的参考价值。

TL; DR(How)是否可以通过实际的Additional Manifest Files GUI / props选项(而不是通过变通方法)让Visual Studio(2010-2015)接受多个清单文件(合并)?


Simplified walk through:

我的C ++应用程序embeds an additional manifest file(包含私有程序集信息)通过Visual-C ++设置:Cfg Properties > Manifest Tool > Input and Output > Additional Manifest Files

C++ Property Page of Visual Studio 2015 test project

这按预期工作。

现在,我需要在第二个清单文件中添加/合并。由于该选项被称为“Additional Manifest File_s_”,这是一个多行编辑框,我尝试在此处添加要合并的第二个文件:

additional manifest files edit dialog

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:"DebugConsoleApplication2.exe.embed.manifest" /nologo "DebugConsoleApplication2.exe.embed.manifest.res"

command line of mt.exe并进一步调查mt.exe帮助我们看到:

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,因为它将两个文件都包含在单个引号字符串中。

Question

有没有办法让Additional Manifest Files选项实际上适用于多个文件?或者我做错了什么?

Background / Workaround

我可以想到以下可能的解决方法:

  • 尝试通过预链接步骤和手动调用mt.exe来共同破解某些东西(未尝试过:可怕)
  • 实际上将清单文件作为文件项添加到VS项目:这将起作用,但是: 将多个.props属性表组合到一个项目中时出现了实际情况,其中一个编译了私有程序集,另一个编译了应用程序兼容性声明。因此,设置不会驻留在实际项目本身上,而是驻留在项目中包含的属性表中。

我也在问题中包括标签,就像我一样

  1. 不确定这是什么责任 - VS或MSBuild
  2. 也许有可能黑客攻击.propsor .vcxproj文件来完成这项工作
答案

汉斯的评论是:

...空格不是文件分隔符。在文件名之间加上分号。

在属性中的每个;文件名后添加seimcolon .manifest就可以了。 VS / MSBuild(无论谁)将正确引用/manifestoption。

也就是说,而不是指定:

  <ItemDefinitionGroup>
    <Manifest>
      <AdditionalManifestFiles>somefile.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles>
    </Manifest>
  </ItemDefinitionGroup>

所有属性表文件(实际上所有Additional Manifest Files设置)都可以(并且应该)在每个文件名后附加一个分号(当仅选择一个文件时也会这样做,以便它可以正确地组合多个属性表):

  <AdditionalManifestFiles>somefile.manifest; %(AdditionalManifestFiles)</AdditionalManifestFiles>
                                           ^^^

以上是关于Visual-Studio Manifest Tool不接受多个附加清单文件?的主要内容,如果未能解决你的问题,请参考以下文章

错误提示:'……' is not assignable to Android.app.Activity Manifest XML

Visual-Studio,为所有人创建定义的现有方法?

service cloudera-scm-server restart报错 Unable to retrieve remote parcel repository manifest

Failed to read Class-Path attribute from manifest of jar

gMock for Dummies - 如何开始? (Visual-Studio-2019)

Docker manifest 详解