Visual-Studio list 工具不接受多个附加 list 文件?

标签 visual-studio visual-c++ msbuild manifest

TL;DR(如何)是否可以让 Visual Studio(2010 - 2015)通过实际的其他 list 文件接受多个 list 文件(进行合并) GUI/props 选项(而不是通过解决方法)?


简化演练:

我的 C++ 应用程序 embeds an additional manifest file (包含私有(private)程序集信息)通过 Visual-C++ 设置:Cfg Properties > Manifest Tool > 输入和输出 > 附加 list 文件

C++ Property Page of Visual Studio 2015 test project

这按预期工作

现在,我需要添加/合并第二个 list 文件。由于该选项称为“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:"Debug\ConsoleApplication2.exe.embed.manifest" /nologo "Debug\ConsoleApplication2.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> ... ]
...

请注意, list 文件选项是空格分隔的,因此 VS 传递给 mt.exe 的内容是骗人的,因为它将两个文件括在单引号字符串中。

问题

有没有办法让附加 list 文件选项真正适用于多个文件?还是我做错了什么?

背景/解决方法

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

  • 尝试通过预链接步骤和手动调用 mt.exe 来破解某些内容(未尝试过:太糟糕了)
  • 实际上将 list 文件作为文件项添加到 VS 项目:这会起作用,但是:

    实际情况是在将多个 .props 属性表组合到一个项目中时出现的,其中一个指定了私有(private)程序集,另一个指定了应用程序兼容性声明。因此,这些设置并不驻留在实际项目本身上,而是驻留在项目中包含的属性表上。

我还包括 在问题中标记,就像我一样

  1. 不确定这应该归咎于什么 - VS 还是 MSBuild
  2. 也许有可能通过破解 .props.vcxproj 文件来实现此目的

最佳答案

汉斯的评论很准确:

... a space is not a file separator. Put semicolons between the file names.

在属性中的每个 .manifest 文件名后面添加一个分号 ; 即可达到目的。 VS/MSBuild(无论是谁)都会正确引用 /manifest 选项。

也就是说,而不是指定:

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

所有属性表文件(实际上是所有附加 list 文件设置)都可以(并且应该)在每个文件名后附加一个分号(当仅指定单个文件名时也可以这样做,以便将其组合在一起)对于多个属性表正确):

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

关于Visual-Studio list 工具不接受多个附加 list 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37346550/

相关文章:

.net - 在构建时注入(inject)程序集版本号

c# - 如何手动编译一个C#项目?

c - Visual Studio : Create a Hello World app in C?

visual-studio - ReSharper 可以自动运行单元测试吗

c# - 在 Visual Studio C# 项目中,文件是否知道其他文件内容而无需使用 using 语句?

c++ - SDL 中的 F12 键导致断点?

visual-studio - 一步帮助构建所有项目+安装程序(.NET + WiX)

c# - 在 Visual Studio 中给定一个类,如何找出包含它的 dll?

c++ - Private Bytes >> Working Set 是否正常?

c++ - 如何为这种情况编写赋值运算符?