2013-03-05 49 views
5

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

Foo.props>通用属性>生成事件>生成后事件> 命令行=酒吧

我如何再指定其他具体项目生成后事件?通常的“继承父项目或项目默认值”缺失,我宁愿不必手动将bar添加到每个单个项目中,因为它很难维护。

回答

2

基于此post,似乎不可能。你前一段时间发布了你的问题;你有没有设法找到一个可行的选择?


反馈后编辑: 一个潜在的混乱的替代方法是定义你的命令宏:

<!-- 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 tasks;特别是,Exec task可能会提供最可行的解决方案。

+0

不,我已经使出分别手动维护每一个项目,按我的问题。我想过的唯一的解决方案(但没有试图实现)是通过脚本设计我自己的继承结构 - 让每个项目调用与其生成后事件相同的脚本,但将项目名称作为变量传递,并让脚本根据需要运行其他命令。笨重,但至少它减少了维护只是一个文件。 – JBentley 2013-12-09 15:43:22

+0

或者,让每个项目都调用它自己的脚本(通过使用MSVC的内置宏来从依赖于项目的位置调用脚本),并让脚本从它们继承的项目中递归地调用脚本。这两种方法的主要问题是继承结构本身必须在两个地方(属性表和脚本)中更新,否则它们会失去同步。 – JBentley 2013-12-09 15:45:04

13

找到该解决方案并查看其他帖子后。我发现不可能理解为什么VC++团队会离开这个功能。

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

PropertySheet1.props

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

PropertySheet2.props

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

结果的所有命令被执行。

+0

这很好。感谢你! – Bklyn 2015-06-18 13:58:59

0

由于一些生成后事件没有从他们定义的属性表中继承,所以我质疑鸭子并且在这里降落。

我有好消息: 由于Visual Studio的2013年,预生成和生成后事件命令行“由父母或项目默认继承”选项,这将增加从属性表中的所有事件都有了。

(与Visual Studio 2013和2017年专业测试)

相关问题