7

bar我在 Visual Studio 中有一个解决方案,其中我有一个共享属性表,其中包含一个需要为每个项目执行的构建后事件命令 ( )。

Foo.props > Common Properties > Build Events > Post-Build Event > Command Line = bar

然后如何指定其他特定于项目的构建后事件?缺少通常的“从父级或项目默认值继承”,我宁愿不必手动添加bar到每个项目,因为它很难维护。

4

3 回答 3

19

在找到此解决方案并查看其他帖子后。我发现无法理解为什么 VC++ 团队会忽略此功能。

在查看属性页的宏后,您可以使用 %(Command) 宏/环境变量包含来自先前属性的命令。这适用于所有构建事件。

PropertySheet1.props

copy some.dll $(OutputPath)
%(Command)

PropertySheet2.props

copy other.dll $(OutputPath)
%(Command)

导致所有命令都被执行。

于 2014-03-30T20:22:07.847 回答
2

根据这篇文章,这似乎是不可能的。您不久前发布了您的问题;您是否设法找到可行的替代方案?


反馈后编辑:一个潜在的混乱选择是将您的命令定义为宏:

<!-- CommandX.props -->
<PropertyGroup>
  <CommandX>bar</CommandX>
</PropertyGroup>

然后您可以添加$(CommandX)到项目的构建后命令或另一个属性表。如果$(CommandX)不存在,它会被悄悄地忽略。

如果将此宏添加到另一个属性表,那么您必须ImportCommandX属性表中$(CommandX)继承一个值:

<!-- Some-Other-Property-Sheet.props -->
<ImportGroup Label="PropertySheets">
  <Import Project="CommandX.props" />
</ImportGroup>

在了解了更多关于构建过程的信息后,我想推荐使用MSBuild 任务;特别是,Exec 任务可能提供最可行的解决方案。

于 2013-12-09T12:19:55.993 回答
0

由于一些构建后事件没有从它们定义的属性表继承,我质疑鸭子并降落在这里。

我有个好消息:自 Visual Studio 2013 起,Pre-Build 和 Post-Build 事件命令行有一个“从父级或项目默认值继承”选项,它添加了属性表中的所有事件。

(使用 Visual Studio 2013 和 2017 Professional 测试)

于 2017-11-14T13:24:32.580 回答