我似乎无法找到微软关于人会如何使用任何有用的文件Delimiter
和InheritsFromParent
在属性UserMacro
在定义用户宏当元素.vsprops
的Visual Studio属性页文件。
下面是使用范例:
<UserMacro Name="INCLUDEPATH" Value="$(VCROOT)\Inc"
InheritsFromParent="TRUE" Delimiter=";"/>
从上面的例子,我猜,“继承”的真正含义“a)如果定义为非空然后追加分隔符,和b)追加新的定义”,其中作为非继承行为是简单地取代任何当前的宏观定义。 有人有确切消息么? 更妙的是,没有任何人有任何建议的Visual Studio替代的文档来源.vsprops
文件和宏?
注意:这是不一样的InheritedPropertySheets
所述的属性VisualStudioPropertySheet
元件,例如:
<VisualStudioPropertySheet ... InheritedPropertySheets=".\my.vsprops">
在这种情况下,“继承”基本上意味着“包括”。
[回答我的问题]
InheritsFromParent
意味着前置。 为了验证这一点,我这样做,显示用户宏在Visual Studio 2008中如何在这里工作是安装一个实验:
- 项目
p.vcproj
包括属性表文件d.vsprops
使用(“D”为衍生 ) InheritedPropertySheets
标签。 -
d.vsprops
包括属性表文件b.vsprops
(“B”为基 )。 -
p.vcproj
还定义了一个预生成事件的转储环境。 - 这两个
.vsprops
文件包含用户宏定义。
b.vsprops
...
<UserMacro Name="NOENV" Value="B"/>
<UserMacro Name="OVERRIDE" Value="B" PerformEnvironmentSet="true"/>
<UserMacro Name="PREPEND" Value="B" PerformEnvironmentSet="true"/>
...
d.vsprops
...
<VisualStudioPropertySheet ... InheritedPropertySheets=".\b.vsprops">
<UserMacro Name="ENV" Value="$(NOENV)" PerformEnvironmentSet="true"/>
<UserMacro Name="OVERRIDE" Value="D" PerformEnvironmentSet="true"/>
<UserMacro Name="PREPEND" Value="D" InheritsFromParent="true"
Delimiter="+" PerformEnvironmentSet="true"/>
...
p.vcproj
...
<Configuration ... InheritedPropertySheets=".\d.vsprops">
<Tool Name="VCPreBuildEventTool" CommandLine="set | sort"/>
...
建立输出
...
ENV=B
OVERRIDE=D
PREPEND=D+B
...
从这些结果,我们可以得出以下结论:
-
PerformEnvironmentSet="true"
是必要的,以用于生成事件的环境中定义的用户宏。 证明: NOENV
在构建输出未显示。 - 用户宏总是从包括属性表继承不管
PerformEnvironmentSet
或InheritsFromParent
。 证明:在b.vsprops
, NOENV
没有在环境中设置和d.vsprops
它无需用于InheritsFromParent
。 - 用户宏程序的简单重新定义覆盖以前的任何定义。 证明:
OVERRIDE
被设定为D
虽然它被较早定义为B
。 - 一个用户宏用的重新定义
InheritsFromParent="true"
预先将新定义的任何以前的定义,由指定的分离Delimiter
。 证明: PREPEND
被设置为D+B
(未D
或B+D
)。
下面是我发现的Visual Studio的解释一些额外的资源.vsprops
文件和相关的话题,它是从几年前,但它仍然是有帮助的:
了解VC项目系统第一部分:文件和工具
了解VC项目系统第二部分:配置和项目属性页对话框
了解VC项目系统第三部分:宏,环境变量和共享
了解VC项目系统第四部分:属性和属性继承
了解VC项目系统第五部分:建筑,工具和依赖性
了解VC项目系统第六部分:自定义生成步骤和建设活动
了解VC项目系统第七部分:“Makefile文件”项目,并(重新)使用环境
有一个关于这个UI版本的文档在这里 。 很多XML文件似乎有些无证,往往只是给人一种模式文件 。 你为它们如何运作的猜测是非常正确的。
文章来源: What do 'Delimiter' and 'InheritsFromParent' attributes mean in .vsprops files?